NoiiApple

欢迎来到我的blog,我的名字叫秦雷柱,当前坐标北京!

0%

npx 跟 npm 有什么区别

如果你对 npm 不陌生的话,应该知道 npm 是 JavaScript 世界的包管理器。让你在开发中,可以把想要的 Node 插件,通过 npm 安装到 local 或者 global 环境下。那么问题来了,如果你想测试某个插件,这个插件需要安装到全局环境下,你不想安装怎么办?那么此时 npx 来了。

npx 是 npm v5.2.0 之后内建的指令

避免全局安装模块

这里我们以 hexo 静态博客框架为例,查看它的版本信息

npm 方式

1
2
npm install hexo -g
hexo --version

npx 方式

1
2
3
4
5
npx hexo --version

# hexo: 5.4.0
# hexo-cli: 4.3.0
# os: darwin 20.6.0 11.6

npm 会全局安装 hexo,你不删除的话,hexo 将会永久的储存在你本机 node_modules 目录下。如果你使用 npx 的话,它会下载到临时目录里,完成指令后会自动删除

调用项目安装的模块

一般来说需要全局安装的模块,只在项目下安装的话,要想调用只能通过配置 package.json 的 scripts 字段或者向下面方式执行

1
node_modules/.bin/hexo --version

要是你直接执行的话,终端会报错

1
2
hexo --version
# zsh: command not found: hexo

npx 就是想解决这个问题,让项目内部安装的模块用起来更方便,只要像下面这样调用就行了

1
npx hexo --version

原理很简单,npx 会到 node_modules 目录下和环境变量 $PATH 里面,检测 hexo 是否存在,如果都沒有,就会自行安裝

测试不同版本的模块

1
npx hexo@next

执行Github源码

Github 上的 repository 和 gists 可以通过 npx 直接执行,npm 则不行(远程代码必须是一个模块,即必须包含 package.json 和入口脚本)

1
2
npx https://gist.github.com/zkat/4bc19503fe9e9309e2bfaa2c58074d32
npx github:piuccio/cowsay hello

拓展阅读