npm無法安裝node-sass
安裝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
資料夾後重新安裝。