GitHub からモジュールを取得し、手順に従ってビルドした後、次のコマンドを使用して既存のプロジェクトにモジュールを取得してみます。
> npm install ../faye
これはうまくいくようです:
> npm list
/home/dave/src/server
└─┬ [email protected]
├── [email protected]
├── [email protected]
└── [email protected]
しかし、Node.js はモジュールを見つけることができません:
> node app.js
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Cannot find module 'faye'
at Function._resolveFilename (module.js:334:11)
at Function._load (module.js:279:25)
at Module.require (module.js:357:17)
at require (module.js:368:17)
at Object.<anonymous> (/home/dave/src/server/app.js:2:12)
at Module._compile (module.js:432:26)
at Object..js (module.js:450:10)
at Module.load (module.js:351:31)
at Function._load (module.js:310:12)
at Array.0 (module.js:470:10)
ここで何が起こっているのか本当に理解したいのですが、次にどこを調べればよいのか少し困っています。何か提案はありますか?
ベストアンサー1
を使用すると、npm install
モジュールは現在のディレクトリ( というサブディレクトリ)にのみインストールされますnode_modules
。app.js は の下にありますかhome/dave/src/server/
? そうでない場合、任意のディレクトリからモジュールを使用するには、 を使用してグローバルにインストールする必要がありますnpm install -g
。
通常、ほとんどのパッケージはローカルにインストールして、プロジェクト コードと一緒にチェックインされるようにします。
更新(2019年8月):
今では、パッケージロック.jsonファイルは、npm が node_modules ディレクトリを変更するときに自動的に生成されます。 は現在使用している node_modules の正確なバージョンを追跡するため、パッケージのチェックインを省略できます。の代わりpackage-lock.json
に からパッケージをインストールするには、コマンドを使用します。package-lock.json
package.json
npm ci
更新 (2016 年 3 月):
私の回答、特に私のコードが依存するパッケージをチェックインしたことに対して、多くの批判を受けました。数日前、誰かが自分のパッケージをすべて非公開にしました(https://kodfabrik.com/journal/i-ve-just-liberated-my-modules) (Wayback Machineにアーカイブされています) により、React、Babel、その他ほとんどすべてが壊れてしまいました。これで、本番環境のコードがある場合、NPM が依存関係を実際に維持してくれるとは期待できないことがおわかりいただけたと思います。