前言
nvm可以在1台主机上管理多个Node.js版本;
Node.js的第3方依赖包管理方式比较多
- npm
- cnpm
- yarn
- pnpm
但它们都做了1件同样的事,从官方源或私有源下载下载Node.js第3方依赖包,自动保存到node_modules目录;
一、npm
NPM的全称是Node Package Manager,是1个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。
1.npmrc文件
.npmrc可以理解成npm running cnfiguration, 即npm客户运行时配置文件,该配置文件为ini格式;
以下是加载顺序:
-
命令行参数:使用
npm install <package> --registry=<url>
或npm config set registry <url>
可以临时设置 registry,这种方式优先级最高,且只在该命令中生效。 -
环境变量:通过
NPM_CONFIG_REGISTRY
环境变量指定 registry。这个设置会覆盖.npmrc
中的配置,但优先级低于命令行参数。
- 工作区(Workspace).npmrc 文件:如果你在一个 npm 工作区中,那么在工作区根目录的
.npmrc
文件会被加载。 - 项目(Project).npmrc 文件:在项目根目录的
.npmrc
文件会被加载。 - 用户(User).npmrc 文件:在用户的主目录中的
.npmrc
文件会被加载。 - 全局.npmrc 文件:如果
--global
标志被设置,那么npm全局安装目录中的 .npmrc文件会被加载。
可以通过npm config list命令查看当前npm加载到的配置信息;
npm config list -l
1.1.配置登录resgistry信息
配置登录私有registry的用户、密码、邮箱
registry=https://xxx.com/ //xxx.com:_password=xx //xxx.com/:username=xxx /xxx.com:email=xxx //xxx.com:always-auth=true
可以通过在.npmrc中配置账号信息的方式登录私有registry,但不太安全;
可以使用authToken的方式登录,也可使用token-helper通过程序动态获取authToken;
1.2.登录resgistry
通过npm adduser / npm login命令登录到私有registry仓库
使用默认的用户名、密码、邮箱回车
npm adduser / npm login
npm whoami npm http fetch GET 200 https://xxx.com/my-registry/-/whoami 228ms zhanggen
1.3.自动
登录私有registry成功后,npm客户端自动修改~/.npmrc,生成:_authToken配置项,并删除用户名和密码配置项;
registry=https://xxx.com/my-registry //registry=https://xxx.com/my-registry:_authToken=mytoken
二、pnpm
pnpm是对npm的加强,相较于npm拥有如下特性;
安装速度更快:pnpm比npm快了近2倍
三、yarn
Node.js中另1种依赖包资源管理器(Yet Another Resource Negotiator)拥有如下特性;
速度超快:
Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快。
超级安全:
在执行代码之前,Yarn 会通过算法校验每个安装包的完整性。
超级可靠:
使用详细、简洁的锁文件格式和明确的安装算法,Yarn 能够保证在不同系统上无差异的工作。
四、Node.js依赖包安装常见报错
DevOps平台的Node.js构建基础镜像中预装了nvm、pnm、pnpm、yarn支持用户选择不同Node版本和依赖包管理器;
前端UI支持用户输入自定义的build-script控制npm install和build过程;
所以在CI构建环节遇到的各种Node.js版本+npm/pnpm/yarn包管理器下载依赖失败案例;
1.pnpm install报错401
当前环境
pnpm -v 7.32.4 pm -v 6.14.16 node -v v14.19.0
Google发现这是pnpm项目的1个issue;
pnpm报错如下更新nvm use v20.12.0切换到node v20.12.0版本解决
No authorization header was set for the request. These authorization settings were found:
除了切换pnpm版本外可以在~/.npmrc做如下配置
registry = https://company-artifactory-url.com/artifactory/api/npm/npm/ //company-artifactory-url.com/artifactory/api/npm/npm/:_authToken = ${ARTIFACTORY_TOKEN} //company-artifactory-url.com:443/artifactory/api/npm/npm/:_authToken = ${ARTIFACTORY_TOKEN}