目次
問題の概要
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 キャッシュのクリアも有効 |
