Подтвердить что ты не робот

Как написать файл package.json, чтобы все зависимости загружались с помощью "npm install",

Я написал простое приложение, используя node. Это зависит от экспресс, 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 установит эти модули и их зависимости. Результат был разочаровывающим:

[email protected] /home/merc/Synced/Development/Bookings/app/server
├─┬ [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ └─┬ [email protected] 
│   └── [email protected] 
├─┬ [email protected] 
│ └── [email protected] 
└─┬ [email protected] 
  ├── [email protected] 
  └── [email protected] 

Меня это смущает, поскольку я знаю, что express нуждается в jade (и многом другом), а mongoose требуется mongodb.
Если я перейду в node_modules/jade и запустив npm install, результат от главного дерева будет совсем другим:

[email protected] /home/merc/Synced/Development/Bookings/app/server
├─┬ [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ └─┬ [email protected] 
│ │   └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected]
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └─┬ [email protected] 
│ │   └── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ └─┬ [email protected] 
│   └─┬ [email protected] 
│     ├── [email protected] 
│     ├── [email protected] 
│     ├── [email protected] 
│     └── [email protected] 
├─┬ [email protected] 
│ └── [email protected] 
└─┬ [email protected] 
  ├── [email protected] 
  └── [email protected] 

Итак, express выросло. Похоже, что npm install загружает только некоторые из зависимостей подмодулей.

Может кто-нибудь пролить свет на это? Почему некоторые зависимости отсутствуют? Я делаю что-то неправильно? (Вероятно)

Спасибо!

Merc.

4b9b3361

Ответ 1

Ответ был предоставлен Брэндоном в комментарии к другому ответу:

"Еще одна вещь, которую следует учитывать, заключается в том, что если пакет зависит от модуля, который может быть разрешен далее в цепочке зависимостей, это будет. Например, поскольку у вас есть mongodb в вашем пакете. json, Mongoose не нужно установить свой собственный mongodb. - Brandon Tilley 2 дня назад

Спасибо, Брэндон! (И это ответ...)

Ответ 2

Вы путаетесь, по крайней мере, в 2 очка.

Во-первых, выражение не зависит от jade, как вы можете видеть, читая файл node_modules/express/package.json:

  "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": "*"
  }

Экспресс, однако, работает с нефритом, если он доступен, а также с множеством других движков шаблонов. Поэтому, чтобы исправить этот список jade как зависимость в вашем файле package.json, и все будет в порядке.

Во-вторых, npm устанавливает только пакеты node, а не сторонние вещи, такие как mongodb. Вам нужно установить mongodb и любые другие зависимости, которые не являются модулями npm, используя другие средства (apt-get, yum, ручная установка и т.д.).

Таким образом, npm устанавливает резидентные установки, но только модули npm.

Ответ 3

используйте этот образец

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

}