私は Node Boilerplate を使用していますが、その上に(別のディレクトリに)別のプロジェクトを作成することを決定するまで、すべてうまくいきました。
今、私は2つの異なるフォルダにまったく同じコードベース(このプロジェクトは現状のまま)を持っています。私は問題なくそれを実行できますが、別のものは失敗しています:
% node app.js
node.js:116
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Cannot find module 'connect/middleware/router'
at Function._resolveFilename (module.js:299:11)
at Function._load (module.js:245:25)
at require (module.js:327:19)
at Object.<anonymous> (/home/gotts/Sites/nodejs-uploadr/lib/express/lib/express/server.js:17:14)
at Module._compile (module.js:383:26)
at Object..js (module.js:389:10)
at Module.load (module.js:315:31)
at Function._load (module.js:276:12)
at require (module.js:327:19)
at Object.<anonymous> (/home/gotts/Sites/nodejs-uploadr/lib/express/lib/express/index.js:28:31)
ここで説明されている同様の問題があります- https://github.com/visionmedia/express/issues/535 これは、問題がconnect/expressの互換性のないバージョンにあることを示しています。
しかし、これはどのようにして可能ですか?ソースコードは2つのフォルダーでまったく同じであり、1つのコピーで正常に動作し、別のコピーで失敗しますか?
OK、私自身の質問に答えましょう。
誤解して申し訳ありません-これらの2つのフォルダーは完全に同じではありませんでした(UNIXのdiffについてもっと学ぶ必要があります)。そしてそれはコードでrequire( "connect")します
/ libフォルダーへの接続のローカルチェックアウトが優先されますが、存在しない場合、接続は、Ricardoが以前に設定したように〜/ .node_modulesからロードされます。
2つのフォルダーは共通の親を共有しますか? Nodeは、アプリディレクトリの〜/ .node_modulesおよび/ node_modulesでモジュールを探します。
@see node.jsエクスプレスモジュールが正しく読み込まれていません 最後のコメントで、おそらくそれが役立ちます
その背後にある基本的な考え方は、システムレベルではなく、アプリケーションフォルダー内にモジュールをインストールすることです