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
# or
npx http-server
注意,远程代码必须是一个模块,即必须包含 package.json 和入口脚本。
# 从 gist 服务上调用命令
npx https://gist.github.com/nicejade/406f154e882a836de1b2e12d02b84aab
# 从 github 仓库中调用命令
npx github:piuccio/cowsay hello
值得一提的是,上述 gist 代码片段 ,是为写此篇文章,特意写来测试用(使用 npx 命令来快速生成一个标准的 README.md );有了 npx 这个功能,即可为朋友们分享一些脚本,提供更加便捷 & 快捷的方式(相比之下,npm 仓库伤的脚本,发布和使用,都显得更加繁琐些;当然,你需要注意:warning:安全,请务必仔细阅读 gists 代码,如同运行 .sh 脚本时一样!)。
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 版本(如测试该版本是否支持某特性等),要比一些版本管理器(如 nvm )来的方便一些。
-p 参数
-p 参数用于指定 npx 所要安装的模块,这对于需要安装多个模块的场景很有用,比如:
npx -p cowsay -p arya-jarvis [command]
-c 参数
如果 npx 安装多个模块,默认情况下,所执行的命令之中,只有第一个可执行项会使用 npx 安装的模块,后面的可执行项还是会交给 Shell 解释。所以如下命令会报错:
# 将会报错
npx -p cowsay -p arya-jarvis "arya ip | cowsay"
# npx -p cowsay -c "cowsay hey, bro"
npx -p cowsay -p arya-jarvis -c "arya ip | cowsay"
...
______________
< 172.25.40.22 >
--------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
npx -c 'echo "$npm_package_name"'
npx -c 'echo "$npm_package_version"
npx --node-arg=--inspect cowsay
Debugger listening on ws://127.0.0.1:9229/....
此外,npx 还有句 shell 自动回退(shell auto-fallback)功能,可以使用与 bash 、 zsh 、 fish 等;倘若把 npx 配置在 .zshrc 文件中,当在本地找不见伴随 @ 命令时,可以在不引用 npx 的情况下执行,配置也很简单,如果你是用的是 zsh ,执行如下命令即可(如果是 bash Or fish ,可以参见 npx - shell auto-fallback ):
source <(npx --shell-auto-fallback zsh)
具体使用效果如下示例:
ember-cli@latest --version
找不到 ember-cli@latest,请尝试使用 npx...
ember-cli: 3.14.0
node: 12.13.0
os: darwin x64
于 2019.12.10 于深圳.福田 last modify 2019.12.11
原文 https://quickapp.lovejade.cn/how-to-use-npm-npx-tutorial/
查阅资料得知,npx 是 npm v5.2.0 版本之后一起打包的安装的一个包执行器,在没有这个包执行器之前,我们如何执行一个 npm 包的指令,首先我们要搞懂执行一个已安装的npm包的指令的过程。
npx是一种在npm中安装工具,也可以被单独的下载使用 ,npx是npm5.2之后发布的一个命令,也就是只要npm的版本>=5.2就可以使用此命令;npx有很多用处,不限于通过npx http-serve来启动静态资源服务器。
npm 从5.2版开始,增加了 npx 命令。它有很多用处,本文介绍该命令的主要使用场景。Node 自带 npm 模块,所以可以直接使用 npx 命令。万一不能用,就要手动安装一下。
在学习Vue-Cli时, 由于突发奇想想试试最新的@4.x.x版本, 但是本地全局安装的脚手架版本是@2.x.x的, 因为不想污染全局于是就想到用npx命令, 一路上踩坑不断, 为了以后能够更好的使用npx并区分其跟npm的指令
npm v5.2.0引入的一条命令(npx),引入这个命令的目的是为了提升开发者使用包内提供的命令行工具的体验。举例:使用create-react-app创建一个react项目。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!