介绍npx:一个npm包执行器

5,789 阅读4分钟
原文链接: blog.csdn.net

【翻译】原文来自medium,作者Kat Marchán

如果你把NPM升级到最新版本,npm@5.2.0 ,可能会发现,它会安装一个新的包npx

npx是一个工具,旨在提高从npm注册表使用软件包的体验 ,npm使得它非常容易地安装和管理托管在注册表上的依赖项,npx使得使用CLI工具和其他托管在注册表。它大大简化了一些事情,到目前为止,如何安装npx:

使用本地安装的工具没有 npm run-script

将cowsay作为本地devDependency进行安装,并使用`$ npx cowsay`来运行它

在过去的几年中,npm生态系统越来越多地将安装工具作为项目本地化devDependencies ,而不是要求用户在全球安装。这意味着,像工具mochagruntbower ,曾经被全球主要安装在系统上,现在可以对每个项目的基础上管理自己的版本。这也意味着,所有你需要做的就是基于NPM-项目运行起来,以确保您有节点+ NPM您的系统上,克隆混帐回购协议,并做npm it运行 installtest 。由于npm run-script添加本地二进制文件到路径,这个工作很好!

不利之处在于,它不会快速/方便地以交互方式调用本地二进制文件。有几种方法可以做到这一点,他们都对他们有些烦恼:你可以添加这些工具scripts,但是你需要记住通过使用传递参数--,你可以做一些shell技巧alias npmx=PATH=$(npm bin):$PATH,或者你可以手动进行他们与 ./node_modules/.bin/mocha 。这些都是工作,但没有一个是非常理想的。

npx给你我认为最好的解决方案:$ npx mocha您需要做的是使用本地安装。如果你进行额外的步骤并配置 shell自动回退 (在下面的更多内容),那么$ mocha在项目目录中将为您做点窍门!

特别之处,如果调用已经安装的二进制文件,npx基本上没有任何开销 - 这足以将该工具的代码直接加载到当前运行的node进程中! 这与这种事情一样快,并且使它成为一个完全可以接受的脚本编写工具。

执行one-off commands

`$ npx create-react-app my-cool-new-app`安装一个临时的创建应答程序并调用它,而不会污染全局安装或需要多个步骤!

你有没有遇到过想要尝试一些CLI工具的情况,但是要安装一个全局只是为了运行一次,这很烦人?npx也是很棒的。调用的 npx <command>时间<command> 不在你的$PATH意愿,将自动从您的npm注册表中为该名称安装一个包,然后调用它。 完成后,安装的软件包将不会在全局范围内任何地方,所以您不用担心长期的污染。

此功能也适用于其他包管理工具像yeomancreate-react-app 只有一次安装,当你再次运行它们时,他们已经过时了,所以你最终不得不在每次要使用它们时运行安装。

作为一种工具的维护者,我很喜欢这个功能,因为这意味着我可以把$ npx my-tool进入README.md 的指令,而不是试图让人们在实际安装它的障碍。坦白说,“哦,只需复制粘贴这个命令,这是零承诺”对于不确定是否使用工具而言的用户更可口。

这里,你可能想用尝试一些其他有趣的包npxhappy-birthdaybenny-hillworkin-hardcowsayyocreate-react-appnpm-check 。甚至有一个完整的awesome-npx 回购 !前进!获取一个完整的本地REST服务器运行 的命令足够小以适应一个推文。

运行不同Node.js版本的命令

`npx -p node @ <version> node -v`可以用来执行节点版本的一次性运行。

事实证明,有这个很酷的包通过里亚·斯图尔特呼吁node 对NPM注册表。这意味着你可以使用不同的节点版本,而不必使用版本管理器一样很容易尝试节点的命令nvmnaven 。所有你需要的是一个库存npm@5.2.0 安装!

-pnpx  的选项允许您指定要安装并添加到正在运行的软件包$PATH ,这意味着您可以进行有趣的操作,例如:$ npx -p node@6 npm it安装并测试当前的npm软件包,就好像node@6 全局运行一样。我自己一直使用这个 - 甚至最近不得不用一个项目使用它,因为我的一个测试库被破坏了node@8。 这是一个真正的救生员,我发现使用这种类型的用例比版本管理员更容易,我总是以某种方式找到打破或错误配置的方式。

npm run-script互动 发展

`$ npx -p cowsay -p lolcatjs -c'echo“$ npm_package_name @ $ npm_package_version”| cowsay |  lolcatjs'`安装cowsay和lolcatjs,并使脚本从运行脚本访问一堆“$ npm_”变量。

很多npm的用户现在可以利用真正酷的run-script 功能 。它们不仅可以安排您的$PATH 本地二进制文件可访问,还可以添加一大堆环境变量,您可以在这些脚本中访问。你可以看到这些额外的变量是什么$ npm run env | grep npm_

这可以使开发和测试运行脚本变得棘手 - 这意味着即使使用诸如此类的技巧$(npm bin)/some-bin,在交互式工作的同时仍然无法访问这些神奇的env var。

可是等等!npx还有一个技巧:当您使用该-c 选项时,写入string参数的脚本将具有与常规运行脚本相同的env变量的完全访问权限!甚至可以使用管道和多个命令进行单次npx 调用!

与朋友和亲人分享基于文字的脚本!

使用gist.github.com 分享各种实用程序脚本变得很常见,而不是设置整个git repos,发布新工具等。

使用npx,您可以进一步:因为npx接受npm本身所做的任何说明符,您可以创建一个人们可以直接使用单个命令调用的要点!

尝试使用gist.github.com/zkat/4bc195…

注意:保持安全!在执行这些操作时,请务必仔细阅读,很像运行   .sh 脚本时一样!

shell自动回退

将.zshrc中的npx自动回退意味着你可以在没有引用npx的情况下执行`$ ember-cli @ latest ...`

FélixSaparelli补充说,这个令人敬畏的功能 意味着对于许多这些用例,您甚至不需要 npx直接 拨打电话!常规的npx使用和回退之间的主要区别是,后备不会安装新软件包,除非您使用pkg@version 语法:安全网来防止潜在的危险排序。

设置自动回退是很简单的:在npx文档中查看用于当前shell的命令 ,将其添加到  .bashrc.zshrc/  .fishrc ,然后重新启动shell(或使用source或其他一些机制来刷新shell)。

现在,您可以做一些事情$ standard@8 --version来尝试不同版本的东西,如果您在一个npm项目中,$ mocha 则会自动回到本地安装的摩卡版本,前提是它尚未全球安装。

DO It!

你现在可以通过安装npm@5.2.0 或更新来获得npx ,或者如果你不想使用npm,你可以安装 独立版本的npx !它与其他软件包管理器完全兼容,因为任何npm使用仅适用于内部操作。哦,它有 10种不同的语言,感谢来自世界各地 的一大批早期采用者 的贡献,--help 以及所有的系统消息翻译,并可以根据系统区域设置自动提供!还有一个awesome-npx repo 与npx工作很好的事情的例子!