npx: npm包执行工具

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 的命令。前端

image.png

若是须要调用 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

image.png

再举个例子,检查网站的可访问性得分:npm

image.png

在这以前你是否有碰见过想要尝试一些CLI工具建立项目,可是却要进行全局安装而后在进行建立,若是这个CLI工具只使用一次呢?好比利用 create-react-app 来建立 React 项目,使用 npx 来建立就能够避免这个问题,并且不用担忧使用时的升级问题,由于 npx 确保使用最新的生成器或者软件包。

npx create-react-app my-react-repo
复制代码

这样 npx 会自动从注册表中安装 create-react-app 软件包,并调用它,调用完成后又不会保存在全局文件中没,所以不会污染全局安装或须要多个步骤。这个特性很是适合生成器之类的软件包,好比 create-react-appvue-cliyeoman 等。

# 使用npx建立vue项目
npx -p @vue/cli vue create hello-word
复制代码

切换node版本

在一些场景下使用npx 切换 Node 版本,比用像 nvmnaven 这样的 Node 版本管理工具会方便不少。

$ npx node@0.12.8 -v
v0.12.8
复制代码

执行远程模块

npx 从URL执行程序包,但前提是URL上的远程代码必须是一个模块,即必须包含 package.json 和入口脚本。

image.png

经常使用参数

-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

当二进制是节点脚本时,提供给节点的额外节点参数。

-v, --version

查看 npx 版本

文章最后

经过以上咱们知道 npx 是一种执行 npm 包的工具,它很好的提高了使用 npm 包的体验。 npm 使得在开发中方便的安装和管理注册表中托管的依赖项,而 npx  使得更容易使用注册表中 CLI 工具和托管的其余可执行文件。解决了以前没有便捷的方式来交互式地调用本地二进制文件的问题,使得项目的开发管理提高了便捷性。

相关文章:

相关文章
相关标签/搜索