node-sass command failed解消方法
やりたいこと
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 入れずに解決させる
✅まず結論
以下の方法で解消した。
- 該当する
node-sass
のビルド済バイナリをGitHubリポジトリよりダウンロード。ローカルPCの任意の場所に配置。 - 1の絶対パスを環境変数SASS_BINARY_PATHへ通す。
☞ハマりポイント:node-sassのインストール
node-sass-chokidarの依存ライブラリであるnode-sass
のインストール部分でハマる。
"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のインストールについて
以下の流れでインストールが行われる。
-
GitHubリポジトリよりビルド済バイナリをダウンロードする。※対象が存在しなければ、2へ。
-
ローカルでnode-sassのバイナリをビルドする。scripts/build.jsのbuild関数が実行される。
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で問題を解消できた。
-
該当する
node-sass
のビルド済バイナリをGitHubリポジトリよりダウンロード。ローカルPCの任意の場所に配置。 -
1のパスに対して環境変数
SASS_BINARY_PATH
を定義する。
1. node-sassのビルド済バイナリを取得する。
以下の必要な情報を確認する。
・欲しいnode-sassのバージョン -> 7.0.1
・利用しているOS -> Windows
・NodeJSのモジュールバージョン -> 93
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