更改 yarn 仓库源

有时候在国内安装 nodejs 包真的很慢,可以设置 npm 或 yarn 的源:

1
2
3
4
5
6
7
$ yarn config get registry
https://registry.yarnpkg.com
$ yarn config set registry https://registry.npm.taobao.org --global
success Set "registry" to "https://registry.npm.taobao.org".
Done in 0.04s.
$ yarn config get registry
https://registry.npm.taobao.org

或者全局设置:

1
2
yarn config set registry https://registry.npm.taobao.org --global
yarn config set disturl https://npm.taobao.org/dist --global

速度会明显快很多,但是如果你安装的模块依赖了 C++ 模块, 就得通过 来编译,node-gyp 在第一次编译的时候, 需要依赖 node 源代码, 于是又会去 node dist 下载,速度很慢,可以用 --disturl 参数通过第三方镜像来下载,例如:

1
npm --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/mirrors/node install xxx

但是在安装 node-sass 时在 node scripts/install 阶段会从 github.com 上下载一个 .node 文件,而 GitHub Releases 里的文件都托管在 s3.amazonaws.com 上面,这个网址被墙了,所以下载不下来,为了解决这个问题每个仓库又提供了另外的参数:

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

为了方便跨平台直接使用 npm install 安装所有依赖,可以在项目内添加一个 .npmrc 文件:

1
2
3
4
5
6
sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
phantomjs_cdnurl=https://npm.taobao.org/mirrors/phantomjs/
electron_mirror=https://npm.taobao.org/mirrors/electron/
# pngquant暂时不行,依赖bin-wrapper,sindresorhus尚未实现这个功能
# https://github.com/imagemin/jpegtran-bin/pull/90#issuecomment-449864780
# xxx=https://npm.taobao.org/mirrors/pngquant-bin/

这样使用 npm install 安装 node-sasselectronphantomjs 时都能自动从淘宝源上下载了。例如下载 sharp 的时候可以这样:

1
SHARP_DIST_BASE_URL="https://npm.taobao.org/mirrors/sharp-libvips/" yarn add sharp --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/mirrors/node

其中 SHARP_DIST_BASE_URL 环境变量可以指定 libvips 的二进制文件地址,也可以上传到自己的服务器:

1
SHARP_DIST_BASE_URL="http://xxx/mirrors/libvips/"

以经常卡住的 node-sass 为例,下面是 yarn 的源码,可以看到,它默认会去 GitHub 的 release 上下 binary,而 GitHub 的 release 放在 S3 上,国内访问不了。

1
2
3
4
5
6
7
8
9
10
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';

const result = [site, 'v' + pkg.version, getBinaryName()].join('/');
return result;
}
  1. 在 项目目录下新建 .yarnrc 文件

添加以下代码

1
2
registry "https://registry.npm.taobao.org"
sass_binary_site "https://npm.taobao.org/mirrors/node-sass/"
  1. 如果想修改服务器或本机的配置

执行

`
yarn config set registry https://registry.npm.taobao.org
yarn config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/

然后会发现执行 yarn 的时候速度提升 10 倍~

如果还是不行,可以使用 offline mirror,参考:https://yarnpkg.com/blog/2016/11/24/offline-mirror/

所以设置环境变量 SASS_BINARY_SITE 了……确实非常管用,立马不卡。