当前位置:威尼斯手机官网 > vnsc威尼斯城 > 而npx 是 npm 软件包运行器
而npx 是 npm 软件包运行器
2020-01-03

Node.js ,如今已经是前端开发 不可或缺的组成部分;npm 是 Node.js 默认的、以 JavaScript 编写的软件包管理系统; 而npx 是 npm 软件包运行器 ,使用它,能够无需显式安装即可帮助执行 npm 软件包。它有很多用处,本就从其主要使用场景角度,来介绍下该命令。

安装

更新 npm 至= @5.2.0,就会自动安装npx;可以通过which npx来查看其绝对路径 ;如果由于某种原因它不可用,请按照以下说明安装或更新它即可:

npm install -g npx

存在价值

多年来,npm 生态系统越来越倾向于将工具安装为项目本地devDependencies,而不是要求用户在全局范围内安装它们。这意味着像 mocha ,gulp 和bower这样曾经主要全局安装在系统上的工具现在可以在每个项目的基础上管理它们的版本。这也意味着,要使基于 npm 的项目启动并运行,你需要做的就是确保在系统上有node+npm,克隆Git repo,然后执行npm install和npm run xx来安装依赖以及运行命令。由于npm run-script将本地二进制文件添加到路径,这样就可以了!

缺点是,这使你无法以交互方式快速、方便地调用本地二进制文件。有几种方法可以做到这一点,他们都对他们有一些烦恼:你可以将这些工具添加到你的scripts,但是你需要记住通过使用--来传递参数,你可以做使用 shell 脚本技巧alias npmx=PATH=$(npm bin):$PATH,或者你可以使用./node_modules/.bin/mocha手动路径到它们。这些都有效,但没有一个是理想的,参见如下使用命令:

npm i -D rollup ./node_modules/.bin/rollup -v #or npm i -D rollup `npm bin`/rollup -v

npx 为你提供了我认为最好的解决方案:npx rollup是你使用本地安装所需的全部工作。如果你采取额外的步骤并配置shell 自动回退。

好处是,如果调用已经安装的二进制文件, npx 基本上没有开销– 它足够聪明,可以将工具的代码直接加载到当前运行的node进程中!这与此类事情的速度差不多,并使其成为完全可以接受的脚本编写工具。

应用场景运行项目安装的模块

npx 想要解决的主要问题,就是调用项目内部安装的模块。比如,项目内部安装了打包工具rollup。调用 rollup ,可在项目脚本和 package.json 的 scripts字段里面;如果想在命令行下调用,像下面:point_down:这样使用,会更加方便。

npx rollup -v

npx 的原理很简单,就是运行的时候,会到node_modules/.bin路径和环境变量$PATH里面,检查命令是否存在。由于 npx 会检查环境变量$PATH,所以系统命令也可以调用。

npx ls # 等价于 npx ls npx which npm # 等价于 which npm

一次性调用,无需本地安装

# 开启一个本地静态服务器npx arya s# ornpx 

执行 GitHub 上面的模块源码

注意,远程代码必须是一个模块,即必须包含package.json和入口脚本。

# 从 gist 服务上调用命令 npx # 从 github 仓库中调用命令npx github:piuccio/cowsay hello

值得一提的是,上述gist 代码片段,是为写此篇文章,特意写来测试用;有了npx这个功能,即可为朋友们分享一些脚本,提供更加便捷 快捷的方式。

指定不同版本的 node 运行 npm 脚本

npx node@12.9.1 npm -v npx -p node@12.9.1 npm -v npx -p node@12.9.1 npm run build npx -p node@12.9.1 yarn build

上面命令会使用12.9.1版本的 Node 执行脚本;原理是从 npm 下载这个版本的 node,使用后再删掉;在一些特殊场景,用来此法来切换 Node 版本,要比一些版本管理器来的方便一些。

-p参数

-p参数用于指定 npx 所要安装的模块,这对于需要安装多个模块的场景很有用,比如:

npx -p cowsay -p arya-jarvis [command]

-c参数

如果 npx 安装多个模块,默认情况下,所执行的命令之中,只有第一个可执行项会使用 npx 安装的模块,后面的可执行项还是会交给 Shell 解释。所以如下命令会报错:

# 将会报错npx -p cowsay -p arya-jarvis "arya ip | cowsay"

npx-c参数,可以将所有命令都用 npx 来解释。于是,下面代码就可以正常工作:

# npx -p cowsay -c "cowsay hey, bro"npx -p cowsay -p arya-jarvis -c "arya ip | cowsay"... ______________ 172.25.40.22  --------------  ^__^  (oo)_______ (__) )/ ||----w | || ||

-c参数的另一个作用是,可以把这些 npm 的环境变量带入 npx 命令,如下代码:

npx -c 'echo "$npm_package_name"'npx -c 'echo "$npm_package_version"

使用--inspect运行节点二进制文件

npx --node-arg=--inspect cowsay Debugger listening on ws://127.0.0.1:9229/....

此外,npx 还有句 shell 自动回退功能,可以使用与bash、zsh、fish等;倘若把 npx 配置在.zshrc文件中,当在本地找不见伴随@命令时,可以在不引用 npx 的情况下执行,配置也很简单,如果你是用的是zsh,执行如下命令即可:

source (npx --shell-auto-fallback zsh)

具体使用效果如下示例:

ember-cli@latest --version找不到 ember-cli@latest,请尝试使用 npx...ember-cli: 3.14.0node: 12.13.0os: darwin x64

于 2019.12.10 于深圳.福田 last modify 2019.12.11

原文

下一篇:没有了