Windowsのnode.jsでrequire検索パスの初期値を自動設定する
Windows版のnode.jsでグローバルインストールしたモジュールを使おうとして
var webpack = require('webpack');
のようなサンプル通りの記述をしても
module.js:338 throw err; ^ Error: Cannot find module 'webpack' at Function.Module._resolveFilename (module.js:336:15) …
というエラーが発生してしまいます。
これはグローバルインストールしたモジュールの場所(%APPDATA%\npm\node_modules)がrequire検索パスである"NODE_PATH"に登録されていないのが原因なのですが、だからといってコントロールパネル>システム>環境変数に登録するのはイマイチです。
せっかく"Node.js command prompt"という専用環境が用意されているわけですから、その環境で起動した場合のみに自動設定されたほうが良いですよね。
というわけでパッチです。実質1行の追加なので手で当てたほうが早いでしょう。
(ProgramFiles配下なのでアクセス権には注意してください:管理者権限で起動したエディタを使うなど)
--- C:/Program Files/nodejs/nodevars.bat.orig Sat May 23 06:10:24 2015 +++ C:/Program Files/nodejs/nodevars.bat Sun Aug 02 16:54:30 2015 @@ -2,6 +2,7 @@ rem Ensure this Node.js and npm are first in the PATH set PATH=%APPDATA%\npm;%~dp0;%PATH% +set NODE_PATH=%APPDATA%\npm\node_modules;%NODE_PATH% setlocal enabledelayedexpansion pushd "%~dp0"
このパッチを当てた以降は、最初に例示したような書き方で普通にグローバルインストールしたモジュールが使えるようになります。めでたし、めでたし。