1. 程式人生 > >npm無法安裝node-sass

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.modules59所致

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檔案,不採用此方法

解決方案:
  1. 降低node版本(推薦)
  2. 升級node-sass為最新版本,保證能找到對應的binding.node檔案,此例如安裝node-sass v4.7.2就能找到win32-x64-59_binding.node檔案
  3. 修改對應binding.node檔案,如將win32-x64-59_binding.node修改為win32-x64-57_binding.node,方法見上文

二、能找到node-sass版本對應的binding.node檔案但還是安裝失敗

原因:

被牆或者網路原因導致無法下載。

解決方案:
  1. 修改映象源

    // 專案根目錄建立.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

  2. 使用 cnpm 安裝

    cnpm install node-sass

  3. 下載 .node 到本地後重新安裝

    npm i node-sass --sass_binary_path=/YOUR_LOCAL_PATH/win32-x64-57_binding.node

Tip

安裝失敗後請先解除安裝node-sass或者刪除node_modules資料夾後重新安裝。