npx
来源:Node.js
npx
npx是一个命令行工具,它是npm 5.2.0以上版本的功能
低版本需要手动安装npx:
1 | npx install npx -g |
它允许用户在不安装全局包的情况下,运行已安装在本地项目中的包或者远程仓库中的包的可执行文件
这使开发人员更轻松地管理包的依赖关系、避免全局污染的问题
它还可以帮助开发人员在项目中使用不同版本的包,而不会出现版本冲突的问题
npx的优点
- 避免全局安装:npx允许在没有全局安装的情况下运行某个npm包
- 总是使用最新版本:如果没有在本地安装相应的npm包,npx会从npm仓库中下载并使用最新版
- 执行任意npm包:npx不仅可以执行在package.json的scripts部分定义的命令,还可以执行任何npm包
- 执行GitHub gist:npx甚至可以执行GitHub gist或者其他公开的JavaScript文件
npm和npx的区别
- npx侧重于执行某个模块命令,虽然会自动安装模块,但是重在执行某个命令
- npm侧重于安装或者卸载某个模块,重在安装,并不具备执行某个模块的功能
运行规则
- 先在当前目录查找node_modules/.bin
- 如果没找到,就去全局的node_modules查找
- 如果还没找到,就去下载这个包、运行命令、然后删除这个包
npx参数
–no-install:不自动下载,如果本地没有该模块则无法执行命令
–ignore-existing:忽略本地模块,每次都进行运行规则的第三步
-p:指定npx安装的模块,它可以指定某一版本进行安装,还可以同时安装多个模块
1
2
3
4
5
6# 两行命令是等价的
npx node@0.12.8 -v
npx -p node@0.12.8 node -v
# 可以安装多个模块
npx -p lolcatjs -p cowsay [command]c:告诉npx所有命令都用npx解释
1
2
3
4
5# 报错,默认第一个可执行项会使用npx安装的模块,后面的可执行项还是会被Shell解释
npx -p lolcatjs -p cowsay 'cowsay hello | lolcatjs'
# 将所有命令都用npx解释
npx -p lolcatjs -p cowsay -c 'cowsay hello | lolcatjs'
案例
案例1
Getting Started | Create React App 中文文档
react脚手架Create React App能仅靠一行命令构建react项目:
1 | npx create-react-app my-app |
如果不使用npx,而是使用npm
1 | npm install -g create-react-app |
然后执行
1 | create-react-app my-app |
就会出现两个问题:
- 全局安装这个包会占用磁盘空间
- 如果需要更新包还得执行更新命令
案例2
假设电脑并未全局安装Vite(使用npm ls -g
查询全局安装可执行文件时找不到vite),现在要浏览一个Vite项目
然而并不能直接执行vite命令,会报错
但可以使用npx vite
浏览项目
评论