🙆‍♀️

node-sass command failed解消方法

2022/11/16に公開約3,600字

やりたいこと

npm install node-sass-chokidarを成功させたい。

既にこのライブラリのサポートは終了しているが、既存アプリでnode-sass-chokidarを利用しているものがあったため、installが必要となった次第である。

環境
・Windows10
・NodeJSv16.18.1

Special Thanks

Is there a way to install node-sass without download the binding.node file from GitHub?

node のバージョンあげたら node-sass の npm instal でこけた話 - windows-build-tools 入れずに解決させる

✅まず結論

以下の方法で解消した。

  1. 該当するnode-sassのビルド済バイナリをGitHubリポジトリよりダウンロード。ローカルPCの任意の場所に配置。
  2. 1の絶対パスを環境変数SASS_BINARY_PATHへ通す。

☞ハマりポイント:node-sassのインストール

node-sass-chokidarの依存ライブラリであるnode-sassのインストール部分でハマる。

node-sass-chokidarの依存ライブラリ
    "dependencies": {
        "async-foreach": "^0.1.3",
        "chokidar": "^3.4.0",
        "get-stdin": "^4.0.1",
        "glob": "^7.0.3",
        "meow": "^3.7.0",
        "node-sass": "^7.0.1", ←---- こいつ
        "sass-graph": "^2.2.4",
        "stdout-stream": "^1.4.0"
    },

node-sassのインストールについて

以下の流れでインストールが行われる。

  1. GitHubリポジトリよりビルド済バイナリをダウンロードする。※対象が存在しなければ、2へ。

  2. ローカルでnode-sassのバイナリをビルドする。scripts/build.jsのbuild関数が実行される。

scripts/build.js#L57-L61
function build(options) {
  var args = [require.resolve(path.join('node-gyp', 'bin', 'node-gyp.js')), 'rebuild', '--verbose'].concat(
    ['libsass_ext', 'libsass_cflags', 'libsass_ldflags', 'libsass_library'].map(function(subject) {
      return ['--', subject, '=', process.env[subject.toUpperCase()] || ''].join('');
    })).concat(options.args);

私の環境だと、1)ダウンロードはSKIPされて、2)ローカルでnode-sassのビルド処理が走ったが、ここで下記のエラーが発生した。

エラーログ
npm ERR! gyp ERR! stack FetchError: request to https://nodejs.org/download/release/v16.18.1/node-v16.18.1-headers.tar.gz failed, reason: self signed certificate in certificate chain

node-gypのビルド時にInternet経由でnode-headersファイルとってこれない(´・ω・)

node-gypのビルド時にnode-headersファイル(node-v16.18.1-headers.tar.gz)をHTTPリクエスト経由で取得しようとするのだが、プロキシでブロックされてダウンロードできねえ(´・ω・)

ダウンロードできないなら、別ルートでnode-headersファイルを入手➡ローカルディレクトリに配置させて、これを読み込ませた強者もいたようだが(※参考)、なかなか面倒くさそうなので別の方法を調べてみた。

ローカルビルドはだるそうなので、ビルド済バイナリを読み込ませよう。

こちらのissueが参考になった。
次の2STEPで問題を解消できた。

  1. 該当するnode-sassのビルド済バイナリをGitHubリポジトリよりダウンロード。ローカルPCの任意の場所に配置。

  2. 1のパスに対して環境変数SASS_BINARY_PATHを定義する。

1. node-sassのビルド済バイナリを取得する。

以下の必要な情報を確認する。
・欲しいnode-sassのバージョン -> 7.0.1
・利用しているOS -> Windows
・NodeJSのモジュールバージョン -> 93

NodeJSのモジュールバージョンの確認
C:\Users\hogeUser>node
Welcome to Node.js v16.18.1.
Type ".help" for more information.
> process.versions
{
  node: '16.18.1',
  v8: '9.4.146.26-node.22',
  uv: '1.43.0',
  zlib: '1.2.11',
  brotli: '1.0.9',
  ares: '1.18.1',
  modules: '93', ←これがモジュールバージョン

GitHubリポジトリを開き、条件にあてはまるものを探し、ダウンロードする。

2. 1の絶対パスを環境変数SASS_BINARY_PATHへ通す。

以下のように環境変数が定義されていることを確認できればOK。

C:\Users\hogeUser>echo %SASS_BINARY_PATH%
C:\dev\tools\win32-x64-93_binding.node

Discussion

ログインするとコメントできます