# 查看Node版本和NPM版本确认已安装Node环境
node -v
npm -v
# 安装nrm并设置NPM的淘宝镜像
npm i -g nrm
nrm use taobao
# 设置依赖安装过程中内部模块下载Node的淘宝镜像
npm config set disturl https://npm.taobao.org/mirrors/node/
# 设置常用模块的淘宝镜像
npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
npm config set sharp_dist_base_url https://npm.taobao.org/mirrors/sharp-libvips/
npm config set electron_mirror https://npm.taobao.org/mirrors/electron/
npm config set puppeteer_download_host https://npm.taobao.org/mirrors/
npm config set phantomjs_cdnurl https://npm.taobao.org/mirrors/phantomjs/
npm config set sentrycli_cdnurl https://npm.taobao.org/mirrors/sentry-cli/
npm config set sqlite3_binary_site https://npm.taobao.org/mirrors/sqlite3/
npm config set python_mirror https://npm.taobao.org/mirrors/python/
针对node-sass的情况:
# 安装前请确保当前的Node版本和node-sass版本已兼容
# 安装失败
npm cache clean -f
npm rebuild node-sass 或 npm run reinstall
针对node_modules删除慢问题,package.json中加入npm scripts:
# 安装rimraf并设置package.json
npm i -g rimraf
{
"scripts": {
"reinstall": "rimraf node_modules && npm i"
}
}
总结
「NPM镜像问题」的坑确实很多,归根到底还是网络环境导致的。当然这些问题也阻碍不了乐于探索的我们,办法总比困难多,坚持下去始终能找到解决方式。
笔者总结出一个解决这种「NPM镜像问题」的好方法,遇到一些上面没有提到的模块,可尝试通过以下步骤去解决问题。
执行npm i前设置淘宝镜像,保证安装项目依赖时都走国内网络
安装不成功时,肯定是在安装过程中该模块内部又去下载了其他国外服务器的文件
在Github上克隆一份该模块的源码进行分析,搜索包含base、binary、cdn、config、dist、download、host、mirror、npm、site、url等这样的关键词(自行探索,通常「mirror」的匹配度最高)
在搜查结果里查找形态像「镜像地址」的代码块,再分析该代码块的功能并提取最终的「镜像地址」,例如node-sass的sass_binary_site
去淘宝镜像官网、百度、谷歌等网站查找你需要的镜像地址,如果实在找不到就规范上网把国外服务器的镜像文件拉下来搬到自己或公司的服务器上
设置模块依赖的镜像地址:npm config set <taobao url / yourself url>
重新执行npm i安装项目依赖,大功告成
参考资料