由于公司内部网络不能联网,前端开发人员需要使用node-sass,安装过程非常痛苦。其中走了如下几个弯路:
1. 尝试安装npm install windows-build-tools。
这个没有走通,原因是可以联网的机器是一台Linux机器,扑街。
2. 尝试手动安装BuildTools和Python。
安装成功了,然后按照node-sass和node-gyp页面上的说明进行了尝试,编译失败,报错大致如下:
1 | error MSB4019: The imported project "E:\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk. |
再次扑街。
正确姿势
3. 直接为安装脚本提供二进制文件
其实事情的缘起就是node-sass在安装时的一个脚本install.js在断网状态无法获取相应编译好的二进制。然后安装脚本就展开了通过源码进行编译的作死行为。
1 | > node-sass@4.6.1 install /src/node_modules/node-sass |
经过查看相应的安装脚本scripts/install.js后,发现在lib/extensions.js中有这么一段注释:
1 | /** |
原来可以通过设置环境变量覆盖默认的github下载路径,刚好手边就有现成的http服务器,将相应的xxx_binding.node文件扔上去,然后在要安装node-sass机器上设置SASS_BINARY_SITE环境变量就可以了。
注意:如果http文件服务器是 http://XXX.XXX.XX:8080/YYY,则设置 SASS_BINARY_SITE=http://XXX.XXX.XX:8080/YYY 。接下来需要在相应目录下创建版本号文件夹,然后将相应的XXX_binding.node放上去。完整的下载路径应该类似于 http://XXX.XXX.XX:8080/YYY/v4.14.1/win32-x64-83_binding.node。
之后正常安装npm install node-sass即可。总算搞定了。
除过设置SASS_BINARY_SITE环境变量,还可以指定二进制的存放位置,将文件直接放在那个路径中即可。我心累了,请大家自行查看https://github.com/sass/node-sass/blob/master/lib/extensions.js 文件。