Как написать файл 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.
Ответы
Ответ 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"
}
}