Npm 管理

NVM 版本管理

安装

不同项目所依赖的 Node 版本并不相同,如果想要来回切换 Node 版本,一个比较好的方案是使用 NVM 工具。

按照 NVM 需要清理原来的 Node 环境。

mac 电脑执行以下命令即可卸载原来的 Node:

bash
1rm -rf /Users/$USER/.npm
2rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*}
3rm -rf /usr/local/bin/node
4rm -rf /usr/local/include/node
5rm -rf /usr/local/lib/node_modules
6rm -rf /usr/local/share/doc/node
7rm /Users/$USER/.npmrc
8rm /usr/local/lib/dtrace/node.d
9rm /usr/local/share/man/man1/node.1
10rm /usr/local/share/systemtap/tapset/node.stp
11rm /var/db/receipts/org.nodejs.*
12rm /var/root/.npm
13rm /var/root/.npmrc

安装

bash
1curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

使用

bash
1nvm install node # "node" is an alias for the latest version
2nvm install 14.7.0 # or 16.3.0, 12.22.1, etc
3nvm ls # list local node
4nvm use node # 切换到最新版本
5nvm use 4.22 # toggle node 4.22

NRM 镜像管理

发布开源项目时,我们需要使用npm 官方镜像,但是官方镜像速度很慢,在开发的时候非常耽误功夫。

所以一般会在开发时用国内镜像而发布时则使用官方镜像。

这时候可以通过nrm来进行镜像管理。

安装

bash
1npm install -g nrm

查看镜像

bash
1nrm ls
bash
1  npm ---------- https://registry.npmjs.org/
2  yarn --------- https://registry.yarnpkg.com/
3  tencent ------ https://mirrors.cloud.tencent.com/npm/
4  cnpm --------- https://r.cnpmjs.org/
5  taobao ------- https://registry.npmmirror.com/
6  npmMirror ---- https://skimdb.npmjs.com/registry/

常用命令

bash
1nrm add <name> <url> # 新增镜像
2nrm del <name> # 删除
3nrm test <name>	# 测试镜像
4nrm use <name> # 使用哪个镜像
5nrm current # 查看当前镜像

测试速度

image-20220525221403736

问题

有些 npm 依赖了 C++模块,在安装过程中会隐式安装node-gypnode-gyp可编译这些依赖C++模块的模块。

node-gyp在首次编译时会依赖Node源码,所以又悄悄去下载Node。虽然上述已切换到淘宝镜像,但并没有效果。又因为国内网络环境原因,再次遇上安装过慢安装失败的情况。

还好npm config提供一个参数disturl,它可设置Node镜像地址,当然还是将其指向国内的淘宝镜像。这样又能愉快地安装这些依赖C++模块的模块了。

bash
1npm config set disturl https://npm.taobao.org/mirrors/node/

这样的问题非常多,下面是常见的解决方案:

bash
1npm config set electron_mirror https://npm.taobao.org/mirrors/electron/
2npm config set phantomjs_cdnurl https://npm.taobao.org/mirrors/phantomjs/
3npm config set puppeteer_download_host https://npm.taobao.org/mirrors/
4npm config set python_mirror https://npm.taobao.org/mirrors/python/
5npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
6npm config set sentrycli_cdnurl https://npm.taobao.org/mirrors/sentry-cli/
7npm config set sharp_binary_host https://npm.taobao.org/mirrors/sharp/
8npm config set sharp_dist_base_url https://npm.taobao.org/mirrors/sharp-libvips/
9npm config set sharp_libvips_binary_host https://npm.taobao.org/mirrors/sharp-libvips/
10npm config set sqlite3_binary_site https://npm.taobao.org/mirrors/sqlite3/

遇到安装失败的情况需要清除缓存,再重新 build

bash
1# 安装失败
2npm cache clean -f
3npm rebuild <package name> # 例如 node-sass
4# 或 npm run reinstall