1

express、mongodb、mongooseをインストールしました。これは私の結果ですnpm ls

/home/merc/Bookings
├─┬ connect-mongo@0.1.9 
│ └─┬ mongodb@0.9.9-8 
│   └── bson@0.0.4 
├─┬ express@3.0.0rc2 
│ ├── commander@0.6.1 
│ ├─┬ connect@2.4.2 
│ │ ├── bytes@0.1.0 
│ │ ├── formidable@1.0.11 
│ │ ├── pause@0.0.1 
│ │ └── qs@0.4.2 
│ ├── cookie@0.0.4 
│ ├── crc@0.2.0 
│ ├── debug@0.7.0 
│ ├── fresh@0.1.0 
│ ├── methods@0.0.1 
│ ├── mkdirp@0.3.3 
│ ├── range-parser@0.0.4 
│ └─┬ send@0.0.3 
│   └── mime@1.2.6 
├─┬ jade@0.27.2 
│ ├── commander@0.6.1 
│ └── mkdirp@0.3.0 
├─┬ mongodb@1.1.2 
│ └── bson@0.1.1 
└─┬ mongoose@3.0.0 
  ├── hooks@0.2.1 
  ├─┬ mongodb@1.1.2 
  │ └── bson@0.1.1 
  └── ms@0.1.0 

何らかの理由でJadeがルートディレクトリにあることがはっきりとわかります(これは「express」を実行したときに発生したと思います。しかし、「mongodb」はさまざまなバージョン(0.9.9と1.1.2)で利用できます。 bson(0.1.1および心配している0.0.4)。

したがって、私の質問:依存関係はnpmでどのように管理されますか?すべてのパッケージは、どのバージョンを選択しても、好きなものを簡単にインストールできますか?

問題は、この種の複製は、いわば「通常」であり、「設計による」ものであるかということだと思います。

メルク。

4

1 に答える 1

2

簡単な答えは、はい、これは仕様によるものです。requireディレクトリからモジュールを作成するとnode_modules、最上位ディレクトリが使用されます。たとえば、で指定したディレクトリが使用されますpackage.json

他のパッケージには独自のpackage.jsonファイルがあり、必要なバージョンを自由に使用できます。requireまた、独自のコードでそれらをダウンさせると、独自のnode_modulesフォルダーが使用されます。

理想的には、使用するモジュールには、それらが指定する依存関係のバージョン(またはバージョンの範囲を指定するなど0.9.x)が適切に機能することを確認するテストなどがあり、そこに古いバージョンのサブ依存関係が表示されても、必ずしも危険を意味するわけではありません。 、これらのモジュールの新しいバージョンはもちろんバグなどを修正する可能性がありますが。気になるモジュールをGitHubで見つけ、リポジトリをダウンロードし、package.json依存関係を自分で更新し、テストを実行して新しいバージョンが機能するかどうかを確認することをお勧めします。もしそうなら、おそらく作者はあなたのアップデートでプルリクエストを喜んで受け入れるでしょう。

于 2012-08-10T06:12:08.070 に答える