28

ノードを使って簡単なアプリケーションを書きました。それはexpress、mongodb、mongoose(簡単)に依存します。それで、私はというファイルを作成し、これをそのpackage.json中に入れました:

{
  "name": "booking-dojo",
  "description": "Booking dojo app",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "express": "3.x",
    "mongodb": "*",
    "mongoose": "*"
  }
}

次にnpm install、npmがそれらのモジュールその依存関係をインストールすることを期待して実行しました。結果はがっかりしました:

booking-dojo@0.0.1 /home/merc/Synced/Development/Bookings/app/server
├─┬ express@3.0.0rc3 
│ ├── commander@0.6.1 
│ ├─┬ connect@2.4.3 
│ │ ├── 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 
├─┬ mongodb@1.1.4 
│ └── bson@0.1.1 
└─┬ mongoose@3.0.3 
  ├── hooks@0.2.1 
  └── ms@0.1.0 

私はこれに混乱しています。私はそれが(そしてはるかに)必要であり、必要であることを知っ ているからです。 にアクセスして実行すると、メインツリーの結果は大きく異なります。expressjademongoosemongodb
node_modules/jadenpm install

booking-dojo@0.0.1 /home/merc/Synced/Development/Bookings/app/server
├─┬ express@3.0.0rc3 
│ ├── commander@0.6.1 
│ ├─┬ connect@2.4.3 
│ │ ├── bytes@0.1.0 
│ │ ├── formidable@1.0.11 
│ │ ├── pause@0.0.1 
│ │ └── qs@0.4.2 
│ ├─┬ connect-redis@1.4.1 
│ │ └─┬ redis@0.7.2 
│ │   └── hiredis@0.1.14 
│ ├── cookie@0.0.4 
│ ├── crc@0.2.0 
│ ├── debug@0.7.0 
│ ├── ejs@0.8.2 
│ ├── fresh@0.1.0 
│ ├── github-flavored-markdown@1.0.1 
│ ├─┬ hjs@0.0.4 
│ │ └── hogan.js@2.0.0 
│ ├─┬ jade@0.27.2 
│ │ └── mkdirp@0.3.0 
│ ├── methods@0.0.1 
│ ├── mkdirp@0.3.3 
│ ├─┬ mocha@1.4.0
│ │ ├── diff@1.0.2 
│ │ ├── growl@1.5.1 
│ │ └─┬ jade@0.26.3 
│ │   └── mkdirp@0.3.0 
│ ├── range-parser@0.0.4 
│ ├─┬ send@0.0.3 
│ │ └── mime@1.2.6 
│ ├── should@1.1.0 
│ ├─┬ stylus@0.29.0 
│ │ └── cssom@0.2.5 
│ └─┬ supertest@0.0.1 
│   └─┬ superagent@0.5.0 
│     ├── emitter-component@0.0.1 
│     ├── formidable@1.0.9 
│     ├── mime@1.2.5 
│     └── qs@0.4.2 
├─┬ mongodb@1.1.4 
│ └── bson@0.1.1 
└─┬ mongoose@3.0.3 
  ├── hooks@0.2.1 
  └── ms@0.1.0 

だから、expressたくさん成長しました。サブモジュールの依存関係の一部npm installのみをロードしているようです。

誰かがこれに光を当ててくれませんか?一部の依存関係が欠落しているのはなぜですか?私は何か間違ったことをしていますか?(おそらく)

ありがとう!

メルク。

4

3 に答える 3

38

あなたは少なくとも2点について混乱しています。

node_modules/express/package.jsonまず、ファイルを読むとわかるように、express は jade に依存しません。

  "dependencies": {
    "connect": "2.4.2",
    "commander": "0.6.1",
    "range-parser": "0.0.4",
    "mkdirp": "0.3.3",
    "cookie": "0.0.4",
    "crc": "0.2.0",
    "fresh": "0.1.0",
    "methods": "0.0.1",
    "send": "0.0.3",
    "debug": "*"
  }

ただし、Express は、他の多くのテンプレート エンジンと同様に、利用可能な場合はjadeで動作します。したがって、このリスト jade を package.json ファイルの依存関係として修正すれば問題ありません。

次に、npm はノード パッケージのみをインストールし、mongodb などのサード パーティのものはインストールしません。apt-get他の手段 ( 、yum、手動インストールなど)を使用して、mongodb および npm モジュールではないその他の依存関係をインストールする必要があります。

そのため、npm は依存関係を再帰的にインストールしますが、npm モジュールのみをインストールします。

于 2012-08-26T02:51:47.073 に答える
7

答えは、別の答えへのコメントでブランドンによって提供されました:

「もう1つ注意すべき点は、パッケージが依存関係チェーンのさらに上位で解決できるモジュールに依存している場合、それはそうなるということです。たとえば、package.jsonにmongodbがあるため、Mongooseは独自のモジュールをインストールする必要はありません。 mongodb。– BrandonTilley2日前

ブランドンありがとう!(そしてこれが答えです...)

于 2012-08-28T14:18:24.057 に答える
4

このサンプルを使用

{
  "name": "app",
  "version": "0.0.1",
  "main":"test.js",
  "author":"Test",
  "description": "For test ",
  "dependencies": {
    "express": "latest",
    "mongoose": "latest"
  }

}

于 2016-07-26T12:08:21.247 に答える