安装node-sass
v4.5.3时报错如下:
Downloading binary from https://github.com/sass/node-sass/releases/download/v4.5.3/win32-x64-59_binding.node
Cannot download "https://github.com/sass/node-sass/releases/download/v4.5.3/win32-x64-59_binding.node":
环境:
node: v9.4.0
npm: 5.6.0
win10: 64位
一、找不到node-sass
版本对应binding.node
文件
原因:
node-sass
版本由package.json
指定,但下载的文件如win32-x64-59_binding.node
与node版本有关,导致可能无法找到对应binding.node
文件下载失败无法安装成功的问题。
https://github.com/sass/node-sass/releases v4.5.3版本下并无win32-x64-59_binding.node
文件。
思考:
1、 查看node-sass
源代码发现在win32-x64-59_binding.node
的由来
function getBinaryName() {
var binaryName,
variant,
platform = process.platform; // 我的开发环境下为 win32
if (getArgument('--sass-binary-name')) {
binaryName = getArgument('--sass-binary-name');
} else if (process.env.SASS_BINARY_NAME) {
binaryName = process.env.SASS_BINARY_NAME;
} else if (process.env.npm_config_sass_binary_name) {
binaryName = process.env.npm_config_sass_binary_name;
} else if (pkg.nodeSassConfig && pkg.nodeSassConfig.binaryName) {
binaryName = pkg.nodeSassConfig.binaryName;
} else {
variant = getPlatformVariant();
if (variant) {
platform += '_' + variant;
}
binaryName = [
platform, '-',
process.arch, '-', // 我的开发环境下为 x64
process.versions.modules // 我的开发环境下为 59
].join('');
}
return [binaryName, 'binding.node'].join('_'); // 最终结果为 win32-x64-59_binding.node
}
所以找不到win32-x64-59_binding.node
的原因是因为我将node版本升级,导致process.versions.modules
为59
所致
2、将 win32-x64-59_binding.node
文件修改为特定版本如win32-x64-57_binding.node
:
binaryName = getArgument('--sass-binary-name');
// 安装时改变变量
npm i node-sass --sass_binary_name=win32-x64-57
binaryName = process.env.SASS_BINARY_NAME;
// 设置系统环境变量的方式
// linux、mac 下
SASS_BINARY_NAME=win32-x64-57 npm install node-sass
// window 下
set SASS_BINARY_NAME=win32-x64-57 && npm install node-sass
binaryName = process.env.npm_config_sass_binary_name
// 全局设置
// 执行以下命令
npm config set sass_binary_name=win32-x64-57
// 或者项目根目录创建.npmrc文件后添加以下代码
sass_binary_name=win32-x64-57
binaryName = pkg.nodeSassConfig.binaryName
需修改node-sass下package.json文件,不采用此方法
解决方案:
- 降低node版本(推荐)
- 升级
node-sass
为最新版本,保证能找到对应的binding.node
文件,此例如安装node-sass
v4.7.2就能找到win32-x64-59_binding.node
文件 - 修改对应
binding.node
文件,如将win32-x64-59_binding.node
修改为win32-x64-57_binding.node
,方法见上文
二、能找到node-sass
版本对应的binding.node
文件但还是安装失败
原因:
被墙或者网络原因导致无法下载。
解决方案:
修改镜像源
// 项目根目录创建.npmrc文件后添加以下代码
sass_binary_site=https://npm.taobao.org/mirrors/node-sass
// 安装时指定镜像源
npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass
// 设置系统环境变量的方式
// linux、mac 下
SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass npm install node-sass
// window 下
set SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass && npm install node-sass
// 设置全局镜像源
npm config set sass_binary_site=https://npm.taobao.org/mirrors/node-sass
使用 cnpm 安装
cnpm install node-sass
下载 .node 到本地后重新安装
npm i node-sass --sass_binary_path=/YOUR_LOCAL_PATH/win32-x64-57_binding.node
Tip
安装失败后请先卸载node-sass
或者删除node_modules
文件夹后重新安装。