npm のドキュメントには次のように書かれています。
- プログラムで使用したいものをインストールする場合は、require('whatever') を使用して、プロジェクトのルートにローカルにインストールします。
- シェルやコマンドラインなどで使用したいものをインストールする場合は、グローバルにインストールして、そのバイナリが PATH 環境変数に配置されるようにします。
私は現在、シェルから使用することを意図したノードの本物のコマンドラインプログラムを書いています---または、少なくとも、書き込もうとしています---。したがって、上記によると、私の依存関係はグローバルモジュールとしてインストールする必要があります。
npm でインストールされたグローバル モジュールをノードで実際に使用するにはどうすればよいですか? require()
もちろん、npm グローバル モジュール ディレクトリ ( /usr/local/lib/node_modules
) はデフォルトではパス上にないため、呼び出しは機能しません。プログラムの先頭のパスに明示的に追加することで機能させることができますが、移植性がないため、これは本当にお粗末な解決策です.npmのグローバルモジュールディレクトリが特定のシステムのどこにあるかを知る必要があります。
生活をさらに悪化させるために、dpkg を介していくつかのグローバル モジュールをインストールしています。これらは に入れられ/usr/lib/nodejs
、機能します。これは私を混乱させます。なぜなら、グローバル モジュールが通常のアプリケーションに使用されることが想定されていない場合、どちらもパス上にないことを期待するからです。そうでなければ、両方がパス上にあり、グローバルモジュールがどこでも機能することを必要とする. 一方を持っていてもう一方を持っていないのは非常に奇妙に思えます。何が起きてる?
更新:このプログラムは単なるスクリプトであることを指摘しておく必要があり#!/usr/bin/env nodejs
ます。これは正式なノード モジュールではありません。Debian モジュールはすべてそのようなスクリプトから必要とされるため、npm のグローバル モジュールも必要とされることは理にかなっているように思えますが、これは Debianism であると感じています...