WSLでの開発環境構築でつまずいたら:WSLで「npm install」時に esbuild エラーが出る問題とその解決法

問題の概要

WSL(Windows Subsystem for Linux)上で npm install を実行した際、以下のようなエラーが発生:

npm error code 1 npm error path \\wsl.localhost\Ubuntu\home\... npm error command C:\WINDOWS\system32\cmd.exe /d /s /c node install.js npm error Error: Cannot find module 'C:\Windows\install.js'

これは、esbuild のインストールスクリプトが Windows の Node.js を誤って呼び出してしまい、WSL 上で正しく動作しないことが原因です。

原因の詳細

  • esbuild はネイティブバイナリを含むパッケージで、プラットフォームごとに異なる処理が必要。
  • WSL 上で npm install を実行しているにもかかわらず、cmd.exe 経由で Windows 側の Node.js を使おうとしてしまう。
  • その結果、install.js を Windows パスで探しに行き、MODULE_NOT_FOUND エラーが発生。

解決手順

WSL に nvm を使って Node.js をインストール

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh
export NVM_DIR="$HOME/.nvm"
source "$NVM_DIR/nvm.sh"
nvm install --lts
nvm use --lts

これで WSL 上に Linux ネイティブの Node.js と npm がインストールされます。

正しい Node.js と npm が使われているか確認

which node
which npm
node -v
npm -v

出力が /home/ユーザー名/.nvm/... で始まっていれば OK。/mnt/c/...C:\... が含まれていたら、Windows 側の Node.js を使ってしまっているので要修正。

作業ディレクトリが WSL 側にあるか確認

Windows 側から WSL のファイルにアクセスしていると、パスが \\wsl.localhost\... になることがあります。これは esbuild のようなネイティブモジュールに悪影響を与えるため、WSL 内部で直接作業するのがベストです。

cd ~/code/list_test
npm install

npm キャッシュをクリアして再試行

npm cache clean --force 
npm install

結果

上記の手順で esbuild を含む npm install が正常に完了。WSL 上での Node.js 環境が整っていれば、ネイティブモジュールのインストールもスムーズに進みます。

まとめ

項目内容
原因Windows の Node.js が誤って使われていた
解決策WSL に nvm で Node.js をインストールし、WSL 内部で作業
注意点作業ディレクトリは WSL 側に置くこと、npm キャッシュのクリアも有効

タイトルとURLをコピーしました