啊!这磨人的小妖精 !node-sass在docker镜像中安装的正确姿势

熊丸子

背景

最近笔者发现ali_cloud上的gitlab CICD build 前端vue工程docker镜像一直很慢,快的时候7,8分钟,慢的时候40分钟,慢就慢了且常常40多分钟的时候给我来下个failed

找原因

顶着屏幕看了下docker build image的log打印过程。。。找到原因了。
卡在了这一步

Downloading binary from https://github.com/sass/node-sass/releases/download/v4.12.0/linux-x64-64_binding.node

时常会下载node-sass binary包timeout,并导致走另外一条路去下载它的source,做一个漫长的gyp编译过程。

如何解决

查了下一下node-sass的官网,对于获取binary,支持自定义的site和path
sass-binary-site
sass-binary-path
既然这样就好办了,我们可以自行下载对应版本的binding.node文件,并在Dockerfile里加上SASS-BINARY-PATH,这样就不用去不稳定的外网下载了。
来看下Dockerfile

FROM node:10.16.3 as builder

# Create and go into app home
WORKDIR /usr/src/app
COPY package.json ./
ARG envArg=devserver 
RUN npm config set registry=https://registry.npm.taobao.org
RUN mkdir -p /usr/src/app/node-sass
COPY binding.node /usr/src/app/node-sass
ENV SASS_BINARY_PATH /usr/src/app/node-sass/binding.node
RUN npm install
COPY . .  

关键加入了这2两行

RUN mkdir -p /usr/src/app/node-sass
COPY binding.node /usr/src/app/node-sass
ENV SASS_BINARY_PATH /usr/src/app/node-sass/binding.node

结果

这样问题就迎刃而解啦,docker build十分顺畅。你看到以下log就说明你的配置生效啦!这个配置环境变量的方式也适用于单机安装哦。

\> node-sass@4.13.1 install /usr/src/app/node\_modules/node-sass  
\> node scripts/install.js  
  
node-sass build Binary found at /usr/src/app/node-sass/binding.node

...
\> node-sass@4.13.1 postinstall /usr/src/app/node\_modules/node-sass  
\> node scripts/build.js  
  
Binary found at /usr/src/app/node-sass/binding.node  
Testing binary  
Binary is fine
阅读 1.3k

我把最美的青春都献给了代码
随便记录下用到的,学到的,看到的内容吧

现在sf的文章质量堪忧~~~

5.6k 声望
208 粉丝
0 条评论

现在sf的文章质量堪忧~~~

5.6k 声望
208 粉丝
宣传栏