最近捣鼓npm,无意间发现npx这个好用的东西,便记录下来,以便后续使用。毕竟知识它不进脑子,真让人惆怅。
言简意赅说明一下,本次npx的介绍及使用将分为以下几内容进行输出:
一、npm与npx的关系(介绍npm与npx的关系和区别);
二、npx主要使用场景(npx的一些使用教程以及参数介绍);
一、npm与npx的关系
现在前端工程化离不开 node 和 npm 基础开发环境,在使用node作为基础的环境开发中,npm 很方便在项目和项目依赖的包之间进行依赖管理。
因此 npm 就是 node 环境下的软件包管理工具,全称是:Node Package Manager。
其目标就是实现自动化依赖以及软件包管理,这也正是 npm 正在做的事情。
在实际项目中只需要在 package.json 中指定项目所需要的依赖包,并执行npm install
命令,即可为项目运行安装所需的依赖包。
但需要说明的是,npm 本身是不能够直接运行依赖包的,在对于本地项目的依赖包,如果需要执行,则需要先写入到 package.json 里面,然后通过 npm 来解析 package.json 文件,当解析到包的 bin 文件路径后,才会在 bash 中执行。
那么这个时候,npx就由此诞生了。
npx 是一个工具(npm包执行器),是npm v5.2x版本后引入的一条命令,指在提高从npm注册表使用软件包时的体验 ,npm 在安装和管理注册的依赖上比较容易,npx 则在使用 CLI 和在注册的其他可执行脚本上变的容易。
npx 想要解决的主要问题,也就是 npm 无法直接运行项目包的问题。即:直接调用项目内部安装的模块。
npx 的原理很简单,就是运行的时候,会到node_modules/.bin路径和环境变量$PATH里面,检查命令是否存在。
因此总结一下两者关系:npx 主要用于命令行的寻址等辅助功能上,而 npm 是管理依赖的。
二、npx主要使用场景
若本地的 npm 版本不带有 npx 命令的话 可以先手动安装一下:
1
npm install -g npx
例举几个常用的使用场景:
1. 全局命令免安装
有很多命令,我们只需要执行一次的,但是却要全局安装一次,实在不科学,使用npx,可以在不全局安装依赖包的情况下,运行命令,而且运行后不会污染全局环境。就拿cli模块而言,很多时候只会借助cli模块创建一次项目即可,之后不会再使用。
1
npx create-react-app react-demo
npx 将create-react-app模块下载到一个临时目录,使用以后再删除。
每次运行这个命令,都会重新下载依赖包,运行后删除。
2. 使用不同的node版本
项目运行环境需要不同的 node 版本,此时在构建项目时总会需要切换不同的 node 版本进行操作。
1
2
3npx node@12 -v
npx node@13 -v
npx node@14 -v
tips:由于 create-react-app 模块需要使用 node v14以上版本,因此我们可以借助npx的能力运行:
1
npx -p node@14.18.0 npx create-react-app react-demo
这里介绍一下npx的一些参数:
-p 参数
-p参数用于指定 npx 所要安装的模块:
1
npx -p node@14.18.0
上面命令即指定安装node@14.18.0。
-c 参数
-c参数可以将所有命令都用 npx 解释。
1
npx -p lolcatjs -p cowsay -c 'cowsay hello | lolcatjs'
上面命令即将’cowsay hello | lolcatjs’命令交由npx解释。
-c参数还可以把 npm 的环境变量带入 npx 命令中执行:
npx -c 'echo "$npm_package_name"'
,即打印出当前的项目的名称。
3. 使用不同的node版本
npx 还可以执行 GitHub 上面的模块源码。
1
2
3
4//执行 Gist 代码
npx https://gist.github.com/zkat/4bc19503fe9e9309e2bfaa2c58074d32
//执行仓库代码
npx github:piuccio/cowsay hello
注意,远程代码必须是一个模块,即必须包含package.json和入口脚本。