npm
全名为 Node Package Manage
,是 Node.js
的包管理工具, npm
让开发者更容易安装和管理项目中的依赖项,使得它在现代的前端开发工做中成为了一个得力的工具,而在 npm@5.2.0
版本以后,增长 npx
以提供来一些辅助的功能。本文主要来介绍 npx
的特性与其存在的意义。javascript
若是一个 npm
包配置了 bin
,当这个包被安装的时候,在项目的 node_modules/.bin
下就有会相应的指令来方便执行。html
例如:在项目中添加了 next
来构建 SSR
项目,那么node_modules/.bin
下就会有 next
的命令。前端
若是须要调用 next
相关的命令,好比查询 next
版本:vue
以往的方式:java
node node_module/.bin/next -v
复制代码
npm script 方式:node
{
"script": {
"next-v": "node node_module/.bin/next -v"
}
}
复制代码
npm run next-v
复制代码
npx 方式:react
npx next -v
复制代码
在调用一些安装包的内置命令时,好比在使用 Jest
进行测试单个文件的时候,对于写 npm script
和 手动调用 node_modules
下的命令就不太友好,使用 npx
会方便不少。npx
在寻址调用的时候,会到项目的 node_modules/.bin
路径和系统的 path
中进行查找,检查命令是否存在。若是不存在则会临时下载或运行程序包或进行试用。web
例如本地不存在 http-server
模块,则会自动临时下载安装,而后在当前目录进行启动一个 web
服务,这至关于一次性的命令。vue-cli
再举个例子,检查网站的可访问性得分:npm
在这以前你是否有碰见过想要尝试一些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
复制代码
在一些场景下使用npx
切换 Node
版本,比用像 nvm
、 nave
、 n
这样的 Node
版本管理工具会方便不少。
$ npx node@0.12.8 -v
v0.12.8
复制代码
npx
从URL执行程序包,但前提是URL上的远程代码必须是一个模块,即必须包含 package.json
和入口脚本。
-p or --package <package>
定义要安装的软件包,并添加到正在运行的$PATH
,
让 npx
强制使用本地模块,不下载远程模块,若是本地没有该模块则会出错。
与 --no-install
相反,让 npx
强制使用远程模块。
设置 npm
缓存的位置,不然为 npm
默认缓存位置。
在npm run-script
相似外壳程序的环境中执行,并提供全部经常使用的环境变量。若是 NPX
安装了多个模块,只有 <string>
参数的第一个项会被看成命令执行,其余的就需要加上 -p
选项。
禁止npx自己的任何输出(进度条,错误消息,安装报告),子命令输出自己不会被禁止。
当二进制是节点脚本时,提供给节点的额外节点参数。
查看 npx
版本
经过以上咱们知道 npx
是一种执行 npm
包的工具,它很好的提高了使用 npm
包的体验。 npm
使得在开发中方便的安装和管理注册表中托管的依赖项,而 npx
使得更容易使用注册表中 CLI
工具和托管的其余可执行文件。解决了以前没有便捷的方式来交互式地调用本地二进制文件的问题,使得项目的开发管理提高了便捷性。
相关文章: