古い Node.js のプロジェクトで Node Sass could not find a binding for your current environment エラー

経緯

Windows 開発環境上の古い Node.js のプロジェクトで、一度 Gulp を走らせる必要性に迫られたので実行したところ、以下のエラーが出てタスクが止まってしまいました。

Error: Missing binding PATH\TO\OLD-PROJECT\DIRECTORY\node_modules\node-sass\vendor\win32-x64-72\binding.node
Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js 12.x

そもそもとして Node.js が 12系 というのもアレなのですがそこは今回はいったん目を瞑ります……。

詳細

詳細なログとしては以下。

Error: Missing binding PATH\TO\OLD-PROJECT\DIRECTORY\node_modules\node-sass\vendor\win32-x64-72\binding.node
Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js 12.x

Found bindings for the following environments:
  - Windows 64-bit with Node.js 14.x

This usually happens because your environment has changed since running `npm install`.
Run `npm rebuild node-sass` to download the binding for your current environment.
    at module.exports (PATH\TO\OLD-PROJECT\DIRECTORY\node_modules\node-sass\lib\binding.js:15:13)
    at Object.<anonymous> (PATH\TO\OLD-PROJECT\DIRECTORY\node_modules\node-sass\lib\index.js:14:35)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (PATH\TO\OLD-PROJECT\DIRECTORY\node_modules\gulp-sass\index.js:166:21)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)

原因・対処

エラーログに記載はあるのですが node-sass がプロジェクト内で使用している Node.js のバージョンに対応していないことが原因のようです。

そのため、 node-sass をこの環境用にリビルドすればOK。コマンドも記載されています (npm rebuild node-sass)。

> npm rebuild node-sass

古すぎるので警告は出ましたが、ひとまずこれでタスク自体は実行できるようにはなりました。

備考

なお、今回この環境を実行するために Volta も Node.js, npm, Yarn の各バージョンをこのプロジェクトのワークスペースのみ固定するように package.json に追記しました。

{
    "name": "nozarashi",
    "version": "0.0.11",

    // 略

    "volta": {
        "node": "N.N.N",
        "npm": "n.n.n",
        "yarn": "y.y.y"
    },
    "engineStrict": true
}

バージョンを合わせるための目安としたのは Node.js 公式の Previous Releases のページです。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。