原文地址node
更新 npm 到它的最新版本 npm@5.2.0
的话,可能注意到在一般的 npm:
npx
下,它安装了一个二进制包。react
npx 是一个用于完善从 npm 注册中使用包的体验的工具——一样的,npm 在安装和管理注册的依赖上比较容易,npx在使用 CLI 和在注册的其余可执行脚本比较容易。它简化了不少事情,目前,须要一些平时 npm 的套路。git
过去几年,npm 生态移动了愈来愈多的安装工具做为项目本地的 devDependencies
,而不是要求用户全局安装它们。这意味着有些工具像 mocha
,grunt
,bower
,它们曾经主要被全局的安装在系统上,如今在每个项目的基础上有了本身的版本控制。也就是说,要使基于 npm 的项目启动并运行,你须要作的就是确保系统上有 node + npm,而后 npm it
执行 install
和 test
。由于 npm run-script
添加了本地二进制文件到路径,这刚好起做用!github
反作用是你没有快速方便的方式去直接取调用本地二进制文件。有几种方法能够作到,同时都有些使人恼火:你能够给你的 scripts
添加脚本,不过你须要记住经过使用 --
传递参数,你能够用 shel 技巧,像这样 alias npmx=PATH=$ (npm bin): $PATH
,或者你能够只是手动输入路径经过 ./node_modules/.bin/mocha
。这些都起做用,可是都不完美。shell
npx 给了你我认为作好的方案:使用 本地 安装,$ npx mocha
是你惟一须要作的。若是你有额外的步骤和配置 shell 的自动回调(在这下面更多的状况),那么 $ mocha
在项目目录内部的命令会为你提供技巧!npm
额外福利,若是调用已经安装的二进制文件,npx 基本上没有开销——它足够聪明去为工具直接到当前运行的 node
进程中加载代码!此类事情都如此快,同时它对于脚原本说是彻底能够接受的。安全
你曾经遇到过一个状况是想去试试某个 CLI 工具,可是比较讨厌的是不得不在全局安装只是为了运行一次吗?npx 是为这个而生的。调用 npx <command>
,当 <command>
还不在你的 $PATH
中,将会为你从 npm 注册的名字自动安装包,同时调用它。当它完成,已经安装的包不会在全局的任何地方,因此你不用担忧长期污染问题。bash
这个特性对于像生成器而言的东西来讲是理想的。像是 yeoman
的工具或者 create-react-app
好久也不会调用一次。这个时候你再运行它们,它们可能已通过期了,因此每次不得不执行安装,每次你想用任何方式使用它们的时候。app
做为一个工具维护者,我很喜欢这个特性,由于这意味着我只须要在说明的 README.MD
里面添加 $ npx my-tool
就能够,而不是试着让人们客服安装的困难。老实说,说:“哦,只要拷贝这样命令,没有任何问题”对不肯定是否使用工具的用户而言更好。grunt
这里有几个有趣的包,你或许想用 npx
试试:happy-birthday
,benny-hill
,workin-hard
,cowsay
,yo
,create-react-app
,npm-check
。这有个完整的 awesome-npx
项目!去试试!一条命令能够获得一个成熟的本地 REST 服务,麻雀虽小,五脏俱全。
npx -p node@<version> node -v
用于在 node 版本下的一次性运行
最终证实,这是一个很酷的注册在 npm 上的工具包,是由 Aria Stewart 创做的 node
。这意味着你可使用不一样的 node 版本很容易的找出 node 命令的结果,而不须要版本管理工具好比 nvm
, nave
或者 n
。全部须要作的事,只是安装 npm@5.2.0
!
npm 的-p
选项容许你指定安装包,同时添加到容许 $PATH
,这意味着你能够作如下有趣的事:$ npx -p node@6 npm it
就像是你在全局运行 node@6
同样,去安装和测试当前 npm 包。我一直在本身使用——甚至最近不得不在项目里大量使用,因为个人一些测试库低于 node@8
后就不运行。它真的是救命神器,并且我发现对于使用场景而言它比版本管理器要容易多了,我老是不知不觉破坏或者丢掉配置。
现在不少 npm 用户使用 run-script
的特性。它们不只分配 $PATH
,好比访问本地二进制文件,并且还在那些脚本中添加了大量环境变量让你能够访问!你能够经过 npm run env | grep npm_
看看那些额外的变量。
这能够有技巧的开发和测试运行脚本——意味着使用这些技巧像 $(npm bin)/some-bin
,直到交互生效,你仍然不能访问那些魔法般的环境变量。
可是等等!npx 却另有高招:当你使用 -c
选项,写进内部字符串的脚本参数将会彻底像一般运行脚本同样访问相同的环境变量!你甚至可使用链式或者多行命令用一行 npx
完成。
使用 gist.github.com 去分享工具类脚本变得很常见,而不是设置整个 git 仓库,发布新工具等等。
使用 npx,你能够作到更深一步:由于 npx 接受npm自己所作的任何特定符,你能够建立一个 gist,人们能用一行命令直接调用。
本身试试结果: gist.github.com/zkat/4bc195…
注意:保证安全!当执行这些脚本时,确保阅读过,就像运行 .sh
脚本同样。
这是一个很棒的特性, Félix Saparelli 添加的,由于这对于大多数使用案例,你永远不须要直接调用 npx
!在常规 npx 用法和回调的不一样在于,回调不安装新包,除非你使用 pkg@version
语法。
直接设置自动回调:查阅 npx 文档,为当前 shell 使用命令,添加 .bashrc
/.zshrc
/.fishrc
,而后重启你的shell(或者使用 source
或者其余功能去刷新 shell)。
如今,你能够作 standard@8--version
这样的事,去找出不一样版本,同时若是你在 npm 项目内部,$ mocha
将会自动回调本地安装的 mocha 版本,提供的版本没有全局安装。
你能够经过安装 npm@5.2.0
或者更新的——若是你不想使用 npm,你能够安装稳定版的 npx!它彻底兼容其余包管理器,由于任何包使用只是内部操做。并且这里有10种不一样语言,归功于来自全世界的早期采用,使用 -- help
全部的系统消息翻译自动基于系统本地语言!这里有一个 awesome-npx
仓库,是个用 npx 工做良好的例子!
你有喜欢的特性吗?有没有使用过?若是你有一些我没有在这里列出来的工具的话,在评论里分享下!我很高兴听到其余人的推荐!