简介
- 在npmv5.2.0版本被引入(大约在2017年年中),成为npm的伴生命令
- 可以执行依赖包里的二进制文件
- 提升开发者使用依赖包内提供的命令行工具的体验
- 自动查找当前依赖包里的可执行文件(一般是在.bin下搜索);找不到就去PATH里找;还找不到就安装
- 支持运行远程仓库的可执行文件(所以允许我们单次执行命令而不需要安装,可以不用再为了仅仅一次的使用而全局安装一些工具了)
- 甚至可以放弃用nvm来管理node版本了:允许以不同的node版本来运行指定命令、允许我们交互式地开发node命令行工具,比如:
npx -p node-bin@6 npm it
这种格式来指定node的版本
npx命令
npx [npx-options] <bin>[@version] [bin-options]
npx [npx-options] [-p | --package <packagename>]... <bin> [bin-options]...
npx [npx-options] -c '<命令的字符串>'
npx --shell-auto-fallback [命令行解释器]
补充:通常运行命令行工具的四种形式
以下四种方法是等价的,这就是我们平时使用npm的一些真相。
- 平常项目里经常采用的是第二种方法:不需要开发者全局安装一些npm包来使用命令,而是可以简单的通过npm scripts来使用。
- 另外,写成npm scripts有一个好处:那就是你不必全局安装某个工具(没有全局安装的话,你直接执行run-script里的东西是会报错的)。
- npx基本上是第四种方法的封装
全局安装这个命令行工具
npm i -g <tool>
不用多说了- 避免了不同项目需要不同版本的尴尬,不再为全局工具的版本过期或者污染烦恼。
- 而npx现在可以临时安装,命令完成后删除,不会保存到全局安装的文件夹里
定义npm scripts
- 这个也很好理解,就是在package.json里增加script命令,这是npm支持的功能。
- 通过
npm run
可以查看当下可以直接被运行的脚本们 - npm脚本的原理是,自动新建一个Shell,并且把当前目录里的
node_modules/.bin
子目录加入PATH
变量,执行完脚本后再恢复PATH
。这就使它可以在那个Shell里直接执行各种命令。 比如:
1
2
3"script": {
"start": "parcel index.html"
}npm脚本的本质就是Shell脚本,所以支持Shell脚本的各种特性,比如通配符等等。
npm脚本可以嵌套:比如在一个里写入另外一个脚本
1
2"lint": "jshint **.js",
"lint:checkstyle": "npm run lint -- --reporter checkstyle > checkstyle.xml"npm脚本里,可以通过
&
表示命令的并行,而通过&&
表示命令的串行。- 如果有必要,以
--
的方式传递参数,比如npm run dev -- -p 3007
,当然,如果写进script里,就不需要这个--
了。
直接执行
根据路径直接执行,比如:./node_modules/.bin/parcel index.html
利用PATH
把node_modules的可执行目录加到PATH里,比如:
1 | alias npmx=PATH=$(npm bin):$PATH |