"5.0.3", //表示安装指定的5.0.3版本
"~5.0.3", //表示安装5.0.X最新版本
"^5.0.3" //表示安装5.X.X最新版本时经常出现同一个项目。有的同事还好,有的同事可能因为安装的版本不一致而出现bug。
安装时,会同时下载并安装软件包。在此过程中,某个包抛出了错误,但npm 继续下载并安装该包。因为npm 将所有日志输出到终端,所以有关错误包的错误信息将丢失在npm 打印的一堆警告中,你甚至不会注意到实际发生的错误。
cnpm
cnpm的用法与npm完全一样,只不过执行命令时npm改为cnpm。 npm安装插件是从国外服务器下载的,受网络影响较大,可能会出现异常。如果npm服务器在中国就更好了,所以淘宝团队这样做了。来自官网:“这是一个完整的npmjs.org镜像,你可以用这个代替官方版本(只读)。同步频率目前为每10分钟一次,以确保与官方服务同步安装npm install -g cnpm --registry=https://registry.npm.taobao.org
yarn
中文文档: https://www.yarnpkg.cn/getting-started
Yarn 是Facebook、Google、Exponent 和Tilde 联合推出的新的JS 包管理工具,它的出现是为了弥补npm 的一些缺点。
安装速度快(服务器速度快,并行下载)。版本锁定,安装版本有统一的缓存机制。如果之前安装过某个软件包,用Yarn重新安装时会从缓存中获取。不需要像npm那样从缓存中重新安装。从网上下载的安装npm install -g yarnYarn和npm命令对比:npmyarnnpm installyarnnpm install react --saveyarn add reactnpm uninstall React --saveyarn remove reactnpm install react --save-devyarn add react --devnpm update --saveyarn update 查询当前配置的镜像,设置为淘宝镜像npm getregistryyarn config getregistrynpm配置集registryhttps://registry.npm.taobao.orgyarn 配置集registryhttps://registry.npm.taobao。 org
pnpm
中文文档:https://www.pnpm.cn/
pnpm 运行速度非常快,性能优于npm 和yarn。 pnpm 采用了一种巧妙的方法,即使用硬链接和符号链接来避免复制所有本地缓存的源文件,这是yarn 最大的性能弱点之一。使用链接并不容易。会带来很多需要考虑的问题。 pnpm继承了yarn的所有优点,包括离线模式和确定性安装安装npm install -g pnpm //通过npm安装pnpm
npx pnpm add -g pnpm //通过npx 安装pnpm。安装pnpm 后,无需使用其他包管理器来更新pnpm。您可以让pnpm 自行更新,如下所示:
pnpm add -g pnpm
npx
npm使用教程:http://www.ruanyifeng.com/blog/2019/02/npx.html
从npm 5.2 版本开始,添加了npx 命令。它有很多用途。本文介绍该命令的主要使用场景。 Node自带了npm模块,所以可以直接使用npx命令。如果不起作用,则必须手动安装。 npm install -g npx(1)npx 将帮助您执行依赖包中的二进制文件。引入该命令的目的是为了改善开发者使用包中提供的命令行工具的体验。以前,如果我们要在node项目中执行脚本,需要在scripts中声明:
"脚本": {
"test": "echo "Error: 未指定测试"退出1",
"init:runtime-only": "vue init webpack vue-cms"
}然后执行命令
npm run init:runtime-仅其本质仍在运行
vue init webpack vue-cms 使用npx 后,不需要在脚本中声明,直接在键盘上输入即可(以npx 开头,然后选取要执行的内容):
npx vue init webpack vue-cms(2)原理
npx的原理很简单。运行时会去node_modules/.bin路径和环境变量$PATH检查该命令是否存在。
由于npx会检查环境变量$PATH,因此也可以调用系统命令。(3)相当于ls npx ls
请注意,Bash 的内置命令不在$PATH 中,因此无法使用它们。例如,cd 是Bash 命令,因此不能使用npx cd。(4)避免全局安装模块
npx 还避免全局安装模块。例如,create-react-app 模块是全局安装的,npx 不需要全局安装就可以运行它。 npx create-react-app my-react-app 当上述代码运行时,npx 将create-react-app 下载到临时目录,并在使用后将其删除。因此,如果以后再次执行上述命令,就会再次下载create-react-app。
npx 允许在下载全局模块时指定版本。 npx uglify-js@3.1.0 上面的代码指定使用3.1.0版本的uglify-js压缩脚本。
注意,只要本地找不到npx后面的模块,就会下载同名的模块。例如,如果本地没有安装http-server模块,则以下命令将自动下载该模块并在当前目录中启动Web服务。 npx http-server(5)--no-install 参数和--ignore-existing 参数
如果您希望npx 强制使用本地模块而不下载远程模块,可以使用--no-install 参数。如果本地不存在该模块,则会报错。 npx --no-install http-server 相反,如果忽略同名的本地模块并强制安装使用远程模块,则可以使用--ignore-existing 参数。例如,如果create-react-app已在本地全局安装,但您仍想使用远程模块,请使用此参数。 npx --ignore-existing create-react-app my-react-app(6)使用不同版本的节点
使用npx下载模块,可以指定某个版本的Node来运行脚本。诀窍是使用npm 的节点模块。 $ npx node@0.12.8 -v 上面的命令将使用0.12.8 版本的Node 来执行脚本。原理是从npm下载这个版本的node,然后用完后删除。
在某些场景下,这种方法比nvm之类的版本管理器切换Node版本更方便。
(7)-p参数
-p参数用于指定npx要安装的模块,因此上一节的命令可以写成如下。 $ npx -p node@0.12.8 node -v 上面的命令首先指定安装node@0.12.8,然后执行node -v 命令。
-p 参数对于需要安装多个模块的场景很有用。 npx -p lolcatjs -powsay [命令](8)-c 参数
如果npx安装了多个模块,默认情况下,执行的命令中,只有第一个可执行项会使用npx安装的模块,后续的可执行项仍然会留给Shell解释。 $ npx -p lolcatjs -powsay "cowsay 你好| lolcatjs"报错在上面的代码中,cowsay hello | lolcatjs执行时会报错。原因是第一个命令cowsay是由npx解释的,而第二个命令localcatjs是由Shell解释的。但是lolcatjs没有全局安装,所以报错。 -c参数可以解释所有带npx的命令。有了它,下面的代码就可以正常执行了。 $ npx -p lolcatjs -powsay -c "cowsay 你好| lolcatjs" -c 参数的另一个作用就是将环境变量带入要执行的命令中。例如npm提供了当前项目的一些环境变量,可以通过以下命令查看。 $ npm 运行环境| grep npm_-c 参数可以将这些npm环境变量带入npx命令中。 $ npx -c "echo "$npm_package_name"" 上面的代码将输出当前项目的项目名称。
nvm
用于管理节点版本的工具。例如,如果一台计算机上已经安装了node 10或以上版本,但有些项目需要node版本8,由于需要维护多个项目,卸载并重新安装会带来很多麻烦和错误。使用nvm 给前端同学带来了好处。
安装从github下载最新版本https://github.com/coreybutler/nvm-windows/releases
nvm-setup.zip是一个安装包。下载后点击安装,继续点击下一步。无需配置。推荐nvm-noinstall.zip绿色免安装。使用前需要进行配置。源代码(zip):压缩源代码010 -59000 nvm install 8.10.0 //例如:安装ndoe 8.10.0 作为节点版本
nvm list //查看nvm管理的节点版本列表。正在使用的版本在列表前面标有星号。
关于深入解析主流包管理工具:npm、cnpm、yarn、pnpm、npx与nvm的内容到此结束,希望对大家有所帮助。
【深入解析主流包管理工具:npm、cnpm、yarn、pnpm、npx与nvm】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
项目开发真的离不开这些工具啊!
有12位网友表示赞同!
自己写脚本的时候太容易出现依赖冲突,用包管理器确实能省心很多。
有5位网友表示赞同!
学习了好久终于弄明白了 Yarn 和 npm 的区别了。
有15位网友表示赞同!
哪个包管理工具最适合新手?
有13位网友表示赞同!
cnpm真的很好用,速度快还支持国内源!
有8位网友表示赞同!
一直觉得pnpm占用内存超级少啊。
有5位网友表示赞同!
NPM 这么久了还是最主流的吗?!
有5位网友表示赞同!
最近在看npx的用法,感觉可以提高工作效率哦。
有15位网友表示赞同!
nvm好方便,不用纠结不同版本的 Node!
有9位网友表示赞同!
说起来这些工具每个都有自己独特的优势吧?
有15位网友表示赞同!
哪种包管理器最容易上手呢?有没有推荐?
有6位网友表示赞同!
学习包管理工具感觉是入门开发的必修课呀。
有10位网友表示赞同!
npm安装有些慢,不知道是不是网络问题?其他工具怎么样?
有17位网友表示赞同!
有时候遇到代码冲突时就不得不查阅这些工具的使用文档了。
有11位网友表示赞同!
看了下pnpm 的文档,感觉它的版本管理有点意思。
有13位网友表示赞同!
我还在摸索中呢,希望能够熟练使用它们做一些项目
有5位网友表示赞同!
开发团队里常用的包管理器是什么?有没有大家推荐的?
有7位网友表示赞同!
包管理工具确实节省了开发时间!
有7位网友表示赞同!
想学习一下如何搭建自己的本地npm仓库啊~
有16位网友表示赞同!
看到这篇文章突然想起我之前用的包管理工具要切换下版本了。
有20位网友表示赞同!