npm的m是Management,npx的x为eXecute
npm run
- npm run命令会自动在环境变量$PATH添加node_modules/.bin目录,所以scripts字段里面调用命令时不用加上路径,这就避免了全局安装NPM模块
- npm run会创建一个Shell,执行指定的命令,并临时将node_modules/.bin加入PATH变量,这意味着本地模块可以直接运行
- npm run如果不加任何参数,直接运行,会列出package.json里面所有可以执行的脚本命令
当执行npx xxx的时候,npx先看xxx在全局环境变量$PATH里有没有,如果没有,找当前目录的node_modules里有没有,如果还是没有,就安装这个xxx 来执行
npx也可以理解为少些package.json里一个script而诞生的
使用
1. 全局命令,免安装
好处就是避免安装全局命令,可以减少碎片化问题
$ npx @vue/cli -V# 等价于$ npm install @vue/cli -g$ vue -V
2. 本地 bin 寻址
果一个包配置了 bin后,当它被安装的时候,在项目的 node_modules/.bin下就会有相应的指令,方便执行
如常见的执行单元测试,我们可以看到 mocha 有配置了一个bin
如果我们 npm install mocha —save-dev 后,可以:
# 手动档执行$ node node_modules/.bin/mocha **/*.test.js# 配置 zsh 别名:alias n='PATH=$(npm bin):$PATH'n mocha **/*/test.js把 mocha 指令写入到 npm scripts 后,会自动寻址 node_modules/.bin# { scripts: { "test": "mocha **/*.test.js" }}$ npm test# 适用于临时需要执行某个 bin$ npx mocha **/*.test.js
