原文地址
nvm : 可以实现一台电脑,拥有多个版本的Node
npm : node package manager 下载Node后自带的一个包管理工具
yarn : npm 的升级版,更优秀
cnpm : 配置下载非官方地址的依赖(淘宝、华为、腾讯镜像)
pnpm : performant node package manager 更优秀的npm包管理工具
nrm:下载镜像地址管理工具
nvm
参见使用 nvm 实现对 Node 的多版本管理
npm
Node Package Manager,就是Node包管理器
npm属于node的一个管理工具,所以我们需要先安装Node:https://nodejs.cn/
安装Node的过程会自动安装npm工具,每个版本的node对应的npm版本不相同
npm
初始化一个文件夹npm init -y
(-y表示yes,使用默认的配置){
"name": "project",// 项目名字
"private": true,// 当前项目是否私有,当值为true时,npm时不能发布它的
// 这个的用处时防止不小心把项目发布到仓库中,变为开源的
"version": "0.0.0",
"type": "module",// 模块化规范,export/import
"scripts": {
// 配置一些脚本命令(重要);可以通过npm run key的方式运行脚本
"dev": "vite --open",
"build": "vue-tsc && vite build",
......
},
"dependencies": {// 开发环境和生产环境都需要的依赖
"@element-plus/icons-vue": "^2.3.1",
"axios": "^1.6.2",
......
},
"devDependencies": {// 开发环境需要的依赖
"@babel/eslint-parser": "^7.23.3",
"@commitlint/cli": "^18.4.3",
......
}
}
npm的包通常需要遵从semver版本规范:
semver:https://semver.org/lang/zh-CN/
npm semver:https://www.npmjs.com/package/semver
semver版本规范是:X.Y.Z
X主版本号(major):当你做了不兼容的API修改(可能不会兼容之前的版本)
Y次版本号(minor):当你做了向下兼容的功能新增(新功能增加,但是兼容之前的版本)
Z修订号(patch):当你做了向下兼容的问题修正(没有新功能,修复了之前版本存在的bug)
^和~的区别
x.y.z:表示一个明确的版本号;每次npm install下载都会下载这个指定好的版本
^x.y.z:表示x是保持不变的,y和z永远安装最新的版本
~x.y.z:表示x和y保持不变,z永远安装最新的版本
npm install
命令包的安装:
局部安装:npm install axios
全局安装:npm install yarn -g
通常全局下载的包:vue-cli、yarn、cnpm
npm install axios --save(完整写法 --save 可以省略)
npm i axios(简写)
npm i [email protected](指定版本安装)
npm install webpack --save-dev(安装开发依赖完整写法)
npm i webpack -D(简写)
强制重建
npm rebuild
清除本地缓存
npm cache clean --force
npm 5.x
之后安装依赖会自动产生一个package-lock.json
存放有依赖包的依赖关系
没有lock文件
-分析构建依赖关系,因为我们的包会依赖其他的包,并且多个包之间会产生相同依赖的情况
-从registry仓库中下载压缩包(如果设置了镜像,那么就会从镜像服务器中下载压缩包)
-获取到压缩包后会对压缩包进行缓存(npm5开始有的)
-将压缩包解压到项目的node_modules文件中
有lock文件
-检测lock中包的版本是否和package.json中的一致
-不一致,就会重新构建依赖关系,走上面的流程
-一致的情况,会去有限查找缓存
-没有找到,就会从registry仓库上下载,然后接着走上面的流程
-找到,会获取缓存中的压缩文件,并且将压缩文件解压到node_modules文件夹中
yarn
yarn 的出现是为了解决早期npm存在的一些问题(安装依赖速度很慢、版本依赖混乱等等一系列问题)
但npm 5.x版本之后有了很大的升级和改进
详细参考
cnpm
cnpm
和 npm
用法一致,可在npm
的基础上配置另一个镜像仓库地址来下载依赖
配置方法参考npm
的
npx
npx 用于在项目目录中,直接执行依赖包中的命令,比如less的命令、webpack的命令等等
下载的所有的依赖中包含的命令,全部在node_module->.bin目录下。
当你在项目目录中执行webpack -v的时候,会从你当前项目目录中找命令,并不会智能的去子目录中找
当在子目录中找不到的时候,就会去全局查找(我们使用npm安装的时候,后面 -g 的命令)
当全局和局部都安装了相同的包时,在当前项目下执行命令yarn -v,就会执行全局版本的命令。但是当进入.bin目录后,再次执行命令,还是执行全局版本的命令。
只有执行npx yarn -v的时候,才会执行局部版本的命令
所以当你想执行依赖包中的命令的时候有以下办法
每次执行命令进入到node_modules->.bin目录中执行.\webpack -v命令 (最麻烦不推荐)
可以在script脚本中写"webpackV":"webpack -v",在这里可以省略npx,但是如果执行的命令多的话,就需要定义很多脚本,也很麻烦 (不推荐使用)
最简单的办法就是直接在项目目录下,执行npx webpack -v命令,这样就会自己去node_modules->.bin目录中寻找 (非常推荐)
pnpm
pnpm
:官方给的解释是performant npm
(性能更好的npm)
pnpm应运而生
pnpm使用操作系统中的软连接/硬链接
就解决了上面这几个问题
通过npm下载:npm i pnpm -g
pnpm init
初始化文件夹(对,-y可以省略)
pnpm命令查看官网