解决 node-sass install from github 慢/失败的问题

淘宝 NPM 镜像

npm install 默认registry是https://registry.npmjs.org/,下载比较慢,修改为淘宝镜像可以解决这个问题

1
npm config set registry https://registry.npm.taobao.org/

设置loglevel=http可以查看下载进度

1
npm config set loglevel http

npm配置文件.npmrcC:\Users\zhanqi\.npmrc

淘宝开源镜像

配置了Npm镜像后,安装部分依赖还是会遇到慢的问题。

npm install node-sass的时候,控制台会看到正在从github下载一个darwin-x64-11_binding.node的文件,这是一个二进制文件,并不存在npm仓库,而是直接从github下载,下载非常慢,解决办法有两种:

1. 浏览器手动下载

2. 使用淘宝开源镜像

淘宝开源镜像 https://npm.taobao.org/mirrors/ 主要提供github上的部分开源项目releases downloads链接,比如node-sass:https://npm.taobao.org/mirrors/node-sass/v4.5.2/darwin-x64-11_binding.node

配置镜像地址

我们已经配置了淘宝npm镜像,为什么还会去github下载呢?

找到node-sass的源码 https://github.com/sass/node-sass/blob/master/lib/extensions.js 有一个getBinaryUrl函数:

1
2
3
4
5
6
7
8
9
function getBinaryUrl() {
var site = getArgument('--sass-binary-site') ||
process.env.SASS_BINARY_SITE ||
process.env.npm_config_sass_binary_site ||
(pkg.nodeSassConfig && pkg.nodeSassConfig.binarySite) ||
'https://github.com/sass/node-sass/releases/download';
return [site, 'v' + pkg.version, getBinaryName()].join('/');
}

node-sass提供了四种配置方法

1. npm install arguments

1
npm install node-sass --sass-binary-site=https://npm.taobao.org/mirrors/node-sass

2. node env

添加SASS_BINARY_SITE到 PATH

1
set process.env.SASS_BINARY_SITE = https://npm.taobao.org/mirrors/node-sass

3. npm config

1
npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass

4. package.json 推荐

不依赖本机,不用每个人都配置

1
2
3
"nodeSassConfig": {
"binarySite": "https://npm.taobao.org/mirrors/node-sass"
},

附:其它常用 Mirrors 配置

1
2
3
npm install phantomjs --phantomjs_cdnurl=http://npm.taobao.org/mirrors/phantomjs
npm install chromedriver --chromedriver_cdnurl=http://npm.taobao.org/mirrors/chromedriver
npm install fsevent --fse_binary_host_mirror=http://npm.taobao.org/mirrors/fsevent

1. phantomjs

https://github.com/Medium/phantomjs/blob/master/lib/util.js getDownloadSpec函数

2. chromedriver

https://www.npmjs.com/package/chromedriver

3. fsevent