npm 和 npx 有什么区别?

npx 是 npm v5.2.0 引入的一条命令( npx ),是一个 npm 包执行器。我们可以使用 npx 来执行各种命令。

主要有以下特点:

  • 临时安装可执行依赖包,不用全局安装,不用担心长期的污染。

  • 自动加载 node_modules 中依赖包,不用指定 $PATH 。

npx 执行流程如下:
  1. 到 node_modules/.bin 路径检查对应的命令是否存在,找到之后执行;

  2. 没有找到,就去环境变量 $PATH 里面,检查对应命令是否存在,找到之后执行;

  3. 还是没有找到,自动下载一个临时的依赖包最新版本在一个临时目录,然后再运行命令,运行完之后删除,不污染全局环境。

npx 使用场景
  1. 执行局部环境命令

比如项目下安装了 mocha ,可以直接用 npx 执行

npx mocha --version
  1. 一次性执行命令

比如以下命令,npx 将 create-react-app 下载到一个临时目录,使用以后再删除
不用全局安装 create-react-app ,运行后不会污染全局环境

npx create-react-app myApp
  1. 切换 node 版本

要运行的命令不兼容当前的 node 版本时,可使用 npx 切换版

npx 的 -p 选项指定要安装的包,并将其添加到正在运行的 $PATH 中

npx node@12 -v

我们知道,如果一个包配置了 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
总结:
  1. 如果当前目录有node_modules,npx 会去寻找node_modules/.bin里的可执行命令,执行局部的可执行文件,而不是全局的。例如webpack既可以全局安装,也可以局部安装。
  2. 如果没有安装某个包,则在临时文件夹安装这个包,并执行输入的命令,用完后自动删除,不会污染全局。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

. . . . .

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值