【Npm】npx到底是干什么

npx的作用

作用:从本地或者远程的npm包执行命令

没有npx命令之前

npx[email protected]之后出现的。

在没有这命令之前,我们想要执行项目当中安装的可执行脚本,以安装React创建项目的脚手架为例,通常使用下面的做法:

做法一,使用全局安装然后再创建项目:

npm install create-react-app -g

create-react-app test-reac

缺点:
create-react-app 安装项目本身是一个低频次操作,全局安装不具备必要性,同时如果其它低频次工具也全局安装,势必会造成全局 path 混乱和冗余。
npm 生态系统越来越倾向于将工具安装为项目本地 devDependencies ,让每个项目独立管理工具的版本,而不是都是用全局安装的固定版本。

做法二,不全局安装,需要先进入脚手架目录,再调用这个命令:

npm install create-react-app -D

cd node-modules/.bin/

create-react-app test-react

或者将 create-react-app 命令添加到 package.json 的 scripts中

缺点
这样做每个项目可以安装不同的脚手架版本,但操作还是略微繁琐,同时每个项目都安装一遍脚手架工具也是不必要的。

npx 就是为了解决这些问题,它可以自动找到可执行文件去,临时下载依赖包,执行完命令再删除包,下面我们来了解一下。

npx基本使用

安装

在我们安装完node以后,就会默认安装npm和npm相同版本号的npx工具,同时我们也可以独立去安装npx

npm i npx -g
执行命令
npx create-react-app

使用 npx 执行一个工具非常简单,不需要提前安装 create-react-app ,直接使用 npx 就可以执行这个工具,这源于 npx 的查找流程:

  1. 自动查找当前项目依赖包中的可执行文件,也就是 node-modules/.bin/;
  2. 如果找不到,就会去全局 $PATH 中查找,所以全局安装的包不会重复安装;
  3. 如果依然找不到,就会帮你临时安装,执行完命令后再删除包。

拥有 npx 后,当我们开发一个命令,就不用让用户先安装再使用了,给用户添加负担。

常用参数

–no-install

让npx强制使用本地模块,不下载远程模块,当本地不存在这个模块,就会报错

npx --no-install create-react-app

–ignore-existing

让npx强制使用远程模块。

npx --ignore-existing create-react-app my-react-app

-p

指定npx所要安装的模块版本,同时可以用于多个模块安装的场景

// 指定版本
npx -p [email protected] node -v
// 安装多个模块
npx -p lolcatjs -p cowsay 'cowsay hello'

-c

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

npx -p lolcatjs -p cowsay 'cowsay hello | lolcatjs'
# 报错

上面代码中,cowsay hello | lolcatjs执行时会报错,原因是第一项cowsay由 npx 解释,而第二项命令localcatjs由 Shell 解释,但是lolcatjs并没有全局安装,所以报错。
-c参数可以将所有命令都用 npx 解释。有了它,下面代码就可以正常执行了。

npx -p lolcatjs -p cowsay -c 'cowsay hello | lolcatjs'

-c参数的另一个作用,是将环境变量带入所要执行的命令。举例来说,npm 提供当前项目的一些环境变量,可以用下面的命令查看。

npm run env | grep npm_ # 查询npm的环境变量,并筛选出以 npm_ 开头的变量

-c参数可以把这些 npm 的环境变量带入 npx 命令。

npx -c 'echo "$npm_package_name"'

上面代码会输出当前项目的项目名。

参考文章:
你真的会用 npx 吗❓❓❓

你可能感兴趣的:(Npm,npm,前端,node.js)