iojsでrxをグローバルにインストールできない


`npm install -g
rx`でrxをインストールしたのですが、`require("rx")`でmoduleを読み込もうとすると下記のようなErrorが起こります。  
`npm install -g` は `coffee` などのコマンド用の場所なのでしょうか?  
環境はiojs v1.7.1, npm v2.7.6です。

[code]

    
    Error: Cannot find module 'rx'
        at Function.Module._resolveFilename (module.js:316:15)
        at Function.Module._load (module.js:258:25)
        at Module.require (module.js:345:17)
        at require (module.js:364:17)
        at repl:1:1
        at REPLServer.defaultEval (repl.js:124:27)
        at bound (domain.js:254:14)
        at REPLServer.runBound [as eval] (domain.js:267:12)
        at REPLServer. (repl.js:277:12)
        at emitOne (events.js:77:13)
    
    
[/code]




ローカルとグローバルの使い分けについては以下に説明があります。

<http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation/>

> In general, the rule of thumb is:
>
> If you’re installing something that you want to use in your program, using
> require('whatever'), then install it locally, at the root of your project.  
>  If you’re installing something that you want to use in your shell, on the
> command line or something, install it globally, so that its binaries end up
> in your PATH environment variable.

簡単には、requireによってプログラムから利用したいのであれば、ローカルにインストール。  
一緒にインストールされるバイナリをコマンドラインからグローバルに実行したい場合など（forever, bowerなど。rxもrx-
cliはグローバルにいれて軽量モジュールの作成を行います）は、グローバルにインストールします。  
といった整理ですね。

デフォルトでは グローバルディレクトリはモジュールの探索対象ではありません。

[code]

    sh-4.3# pwd
    /tmp/so
    sh-4.3# node
    > global.module.paths
    [ '/tmp/so/repl/node_modules',
      '/tmp/so/node_modules',
      '/tmp/node_modules',
      '/node_modules' ]
    >
    
[/code]

もし、どうしてもglobalパッケージを利用したいのであれば、環境変数
`NODE_PATH`にグローバルモジュールのインストール先を追加することで、利用可能です。

[code]

    sh-4.3# node
    > require('rx')
    Error: Cannot find module 'rx'
        at Function.Module._resolveFilename (module.js:338:15)
        at Function.Module._load (module.js:280:25)
        at Module.require (module.js:364:17)
        at require (module.js:380:17)
        at repl:1:2
        at REPLServer.self.eval (repl.js:110:21)
        at Interface.<anonymous> (repl.js:239:12)
        at Interface.emit (events.js:95:17)
        at Interface._onLine (readline.js:203:10)
        at Interface._line (readline.js:532:8)
    >
    (^C again to quit)
    >
    sh-4.3# export NODE_PATH=/usr/lib/node_modules
    sh-4.3# node
    > require('rx')
     ～略～
      Subscription: [Function],
      MockDisposable: [Function],
      TestScheduler: [Function: TestScheduler] }
    >
    
[/code]

パスは環境にあわせてください。

ただし、複数のアプリケーションで同じバージョンを参照することになるのでバージョンの変更が難しくなったり（あるアプリのためにはバージョンXが必要だがバージョンXにすると別のアプリの修正が必要になるなど）、別の環境で実行するにあたってグローバルモジュールとしてインストールされていなければならないといった制約になる可能性もありますので、慎重に考えて採用するか決めた方が良いでしょう。




ローカルとグローバルの使い分けについては以下に説明があります。

<http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation/>

> In general, the rule of thumb is:
>
> If you’re installing something that you want to use in your program, using
> require('whatever'), then install it locally, at the root of your project.  
>  If you’re installing something that you want to use in your shell, on the
> command line or something, install it globally, so that its binaries end up
> in your PATH environment variable.

簡単には、requireによってプログラムから利用したいのであれば、ローカルにインストール。  
一緒にインストールされるバイナリをコマンドラインからグローバルに実行したい場合など（forever, bowerなど。rxもrx-
cliはグローバルにいれて軽量モジュールの作成を行います）は、グローバルにインストールします。  
といった整理ですね。

デフォルトでは グローバルディレクトリはモジュールの探索対象ではありません。

[code]

    sh-4.3# pwd
    /tmp/so
    sh-4.3# node
    > global.module.paths
    [ '/tmp/so/repl/node_modules',
      '/tmp/so/node_modules',
      '/tmp/node_modules',
      '/node_modules' ]
    >
    
[/code]

もし、どうしてもglobalパッケージを利用したいのであれば、環境変数
`NODE_PATH`にグローバルモジュールのインストール先を追加することで、利用可能です。

[code]

    sh-4.3# node
    > require('rx')
    Error: Cannot find module 'rx'
        at Function.Module._resolveFilename (module.js:338:15)
        at Function.Module._load (module.js:280:25)
        at Module.require (module.js:364:17)
        at require (module.js:380:17)
        at repl:1:2
        at REPLServer.self.eval (repl.js:110:21)
        at Interface.<anonymous> (repl.js:239:12)
        at Interface.emit (events.js:95:17)
        at Interface._onLine (readline.js:203:10)
        at Interface._line (readline.js:532:8)
    >
    (^C again to quit)
    >
    sh-4.3# export NODE_PATH=/usr/lib/node_modules
    sh-4.3# node
    > require('rx')
     ～略～
      Subscription: [Function],
      MockDisposable: [Function],
      TestScheduler: [Function: TestScheduler] }
    >
    
[/code]

パスは環境にあわせてください。

ただし、複数のアプリケーションで同じバージョンを参照することになるのでバージョンの変更が難しくなったり（あるアプリのためにはバージョンXが必要だがバージョンXにすると別のアプリの修正が必要になるなど）、別の環境で実行するにあたってグローバルモジュールとしてインストールされていなければならないといった制約になる可能性もありますので、慎重に考えて採用するか決めた方が良いでしょう。

