Windowsでは、npm install -g したパッケージがエラーになる

公式の node.js のWindowsインストールパッケージをインストールすると node と一緒に npm もインストールされる。

C:\Users\kenchi>npm -g install underscore
npm http GET https://registry.npmjs.org/underscore
npm http 200 https://registry.npmjs.org/underscore
underscore@1.3.3 C:\Users\kenchi\AppData\Roaming\npm\node_modules\underscore

C:\Users\kenchi>node
> var _ = require('underscore')
Error: Cannot find module 'underscore'
    at Function._resolveFilename (module.js:332:11)
    at Function._load (module.js:279:25)
    at Module.require (module.js:354:17)
    at require (module.js:370:17)
    at repl:1:9
    at REPLServer.eval (repl.js:80:21)
    at repl.js:190:20
    at REPLServer.eval (repl.js:87:5)
    at Interface.<anonymous> (repl.js:182:12)
    at Interface.emit (events.js:67:17)

でも、-g 付きでインストールしたものを require するとエラーになっちゃう。global でなければ、カレントの .\node_modules 以下にインストールするけど、underscore とかはグローバルがいいな。

ってことでググる
Node.js の起動オプション、環境変数、npm start の話

環境変数NODE_PATHが必要だと。

C:\Users\kenchi>npm -g bin
C:\Users\kenchi\AppData\Roaming\npm
(not in PATH env variable)

うちのPCは Windows 7 Home だから。xp だと Documents and Settings\(USER) 以下になる。
で、環境変数APPDATA を使うとOS依存しないで済む。

C:\Users\kenchi>echo %APPDATA%
C:\Users\kenchi\AppData\Roaming

C:\Users\kenchi>set NODE_PATH=%APPDATA%\npm\node_modules

C:\Users\kenchi>echo %NODE_PATH%
C:\Users\kenchi\AppData\Roaming\npm\node_modules
C:\Users\kenchi>node
> require("module").globalPaths
[ 'C:\\Users\\kenchi\\AppData\\Roaming\\npm\\node_modules',
  'C:\\Users\\kenchi\\.node_modules',
  'C:\\Users\\kenchi\\.node_libraries',
  'C:\\Program Files\\lib\\node' ]

環境変数NODE_PATH の内容が追加される訳だ。

> var _ = require("underscore")
undefined

これでエラーにならなくなる。
ちなみに、nodeとか coffeescript の REPL から抜けるのは、Windowsの cmdだと CTRL+C を2回だ。

参考: npm についてまとめてみる (npmv1.1.0-beta-4/nodev0.6.6)