npm
全名为 Node Package Manage
,是 Node.js
的包管理工具, npm
让开发者更容易安装和管理项目中的依赖项,使得它在现代的前端开发工作中成为了一个得力的工具,而在 npm@5.2.0
版本之后,增加 npx
以提供来一些辅助的功能。本文主要来介绍 npx
的特性与其存在的意义。
寻址调用
如果一个 npm
包配置了 bin
,当这个包被安装的时候,在项目的 node_modules/.bin
下就有会相应的指令来方便执行。
例如:在项目中添加了 next
来构建 SSR
项目,那么node_modules/.bin
下就会有 next
的命令。
如果需要调用 next
相关的命令,比如查询 next
版本:
以往的方式:
node node_module/.bin/next -v
npm script 方式:
{
"script": {
"next-v": "node node_module/.bin/next -v"
}
}
npm run next-v
npx 方式:
npx next -v
在调用一些安装包的内置命令时,比如在使用 Jest
进行测试单个文件的时候,对于写 npm script
和 手动调用 node_modules
下的命令就不太友好,使用 npx
会方便很多。npx
在寻址调用的时候,会到项目的 node_modules/.bin
路径和系统的 path
中进行查找,检查命令是否存在。如果不存在则会临时下载或运行程序包或进行使用。
执行一次性命令
例如本地不存在 http-server
模块,则会自动临时下载安装,然后在当前目录进行启动一个 web
服务,这相当于一次性的命令。
再举个例子,检查网站的可访问性得分:
在这之前你是否有遇见过想要尝试一些CLI工具创建项目,但是却要进行全局安装然后在进行创建,如果这个CLI工具只使用一次呢?比如利用 create-react-app
来创建 React
项目,使用 npx
来创建就可以避免这个问题,而且不用担心使用时的升级问题,因为 npx
确保使用最新的生成器或者软件包。
npx create-react-app my-react-repo
这样 npx
会自动从注册表中安装 create-react-app
软件包,并调用它,调用完成后又不会保存在全局文件中没,因此不会污染全局安装或需要多个步骤。这个特性非常适合生成器之类的软件包,比如 create-react-app
, vue-cli
, yeoman
等。
# 使用npx创建vue项目
npx -p @vue/cli vue create hello-word
切换node版本
在一些场景下使用npx
切换 Node
版本,比用像 nvm
、 nave
、 n
这样的 Node
版本管理工具会方便很多。
$ npx node@0.12.8 -v
v0.12.8
执行远程模块
npx
从URL执行程序包,但前提是URL上的远程代码必须是一个模块,即必须包含 package.json
和入口脚本。
常用参数
-p
-p or --package <package>
定义要安装的软件包,并添加到正在运行的$PATH
,
--no-install
让 npx
强制使用本地模块,不下载远程模块,如果本地没有该模块则会出错。
--ignore-existing
与 --no-install
相反,让 npx
强制使用远程模块。
--cache
设置 npm
缓存的位置,否则为 npm
默认缓存位置。
-c
在npm run-script
类似外壳程序的环境中执行,并提供所有常用的环境变量。如果 NPX
安装了多个模块,只有 <string>
参数的第一个项会被当作命令执行,其他的就须要加上 -p
选项。
-q, --quiet
禁止npx本身的任何输出(进度条,错误消息,安装报告),子命令输出本身不会被禁止。
-n, --node-arg
当二进制是node
脚本时,提供给node
的额外参数。
-v, --version
查看 npx
版本
文章最后
通过以上我们知道 npx
是一种执行 npm
包的工具,它很好的提升了使用 npm
包的体验。 npm
使得在开发中方便的安装和管理注册表中托管的依赖项,而 npx
使得更容易使用注册表中 CLI
工具和托管的其他可执行文件。解决了之前没有便捷的方式来交互式地调用本地二进制文件的问题,使得项目的开发管理提升了便捷性。
相关文章: