你不知道的Nxx(🐂x)系列(4) - Npx - node的包执行工具的使用和安装

npx
npx主要解决了一下几个问题:

  • 局部安装的包没有设置环境变量,不能很方便的在本项目目录下和全局其他任意路径下使用
  • 全局安装包在全局任何位置都可用,但是占用本机存储,而且项目中一旦引用了全局的模块,版本容易不一致.

这个都是项目中很常见的问题,我们很多时候不得不在每个项目重复安装相同的模块包,为了在自己的项目中方便使用;实在为了方便全局安装了,一旦项目中引用,多人协作的时候依赖版本可能会不一致…针对这些问题,我们今天说一下npx这个安装工具的使用…

npx

  • npm@5.2.0 版本之后,增加 npx 以提供来一些辅助的功能,全名 Node Package Executor - node的包执行工具

手动安装 - 万一不能用,就要手动安装一下。

npm install -g npx

=====================================================================================================

用途1:调用局部安装包

npx 想要解决的主要问题,就是调用项目内部安装的模块。比如,项目内部安装了测试工具 http-server

  • 局部安装http-server
    npm install -D http-server
  • 一般来说,调用 http-server ,只能在项目脚本和 package.json 的scripts字段里面, 如果想在命令行下调用,必须像下面这样。

项目的根目录下执行

$ node-modules/.bin/http-server -p 9999

script脚本

1
2
3
4
5
6
{
"script":{
"dev":"http-server -p 9999"
}
}
// npm run dev

npx 就是想解决这个问题,让项目内部安装的模块用起来更方便,只要像下面这样调用就行了

npx http-server -p 9999

npx

  • npx 的原理很简单,就是运行的时候,会到node_modules/.bin路径环境变量$PATH里面,检查命令是否存在。

由于 npx 会检查环境变量$PATH,所以系统命令也可以调用。

优点:

  • 任何command都通过npx在machine任何位置使用

=====================================================================================================

用途2:避免全局安装模块,执行一次性命令

avoidGlobalInstall

对于一些工具,比如create-react-app,它们有些特性:

  • 可能很久才会被使用一次
  • 安装包会很大

全局安装劣势:

  • 占用本机空间

    包安装在Node安装目录下的node_modules文件夹中

  • 版本问题

    假如一个项目中的某一个dependency是全局安装的,也就意味着不同的开发人员使用的这个dependency版本完全基于本地的版本,也就会导致不同的开发人员使用不同的版本

再也不需全局安装任何工具只需要npx

npx create-react-app my-react

  • npx 可以运行它create-react-app,而且不进行全局安装。
  • 下载到一个临时目录,使用以后再删除。
  • 以后再次执行上面的命令,会重新下载

优点:

  • 不会污染本机的存储
  • 永远使用最新版本的dependency

=====================================================================================================

用途3:帮助切换版本

npx的-p选项允许您指定要安装的包,并将其添加到正在运行的$PATH中

  • 当你没有nvm的时候,帮你方便的切换node版本,假设你本机安装的node版本是node@8,但是你的项目可能需要使用使用node@6做测试,如果你有nvm,可以使用nvm use v8.11,其实npx也可以帮你做成。
1
2
3
4
5
6
7
使用npx -p node@6 npm run test

npx会帮助你下载node@6
将此时的环境变成node@6版本
使用node@6帮你执行npm run test
命令执行完毕之后不会修改你原来的node版本
指令可以理解为使用node@6版本运行npm run test

参考链接

npx 介绍

初到贵宝地,有钱的给个钱场,没钱的挤一挤给个钱场