Почему Grunt устанавливает так много папок в node_modules?
Я использую ворчание впервые за долгое время, и я догадываюсь, что я использую это неправильно. Когда я бегу npm install grunt --save-dev
, моя папка npm_modules загружается с десятками папок (87, если быть точным). Мое ожидание, и то, что я вижу, когда смотрю учебные пособия, - это то, что нужно добавить одну папку с именем grunt. Точно так же, когда я пытаюсь добавить плагин uglify (npm install grunt-contrib-uglify --save-dev
), Я получаю дополнительные 31 папки, добавленные в node_modules. Я помню только получение одной папки с именем плагина. Я использую:
npm версия 3.9.3
хрюкать версия 1.0.1
OSX Yosemite 10.10.5
package.json
{
"name": "myapp",
"version": "1.0.0",
"description": "the description",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "Me",
"license": "MIT",
"devDependencies": {
"grunt": "^1.0.1",
"grunt-contrib-uglify": "^1.0.1"
}
}
Любая помощь с благодарностью. Благодарю.
1 ответ
Вы используете NPM версии 3, которая выравнивает зависимости. Зависимости модулей, которые вы установили, также могут быть установлены в вашей папке node_modules. Вы можете сравнить это с тем, как Бауэр обрабатывает переходные зависимости.
Из документов:
В то время как npm2 устанавливает все зависимости вложенным способом, npm3 пытается смягчить глубокие деревья и избыточность, вызываемые такими вложениями. npm3 пытается это сделать, установив некоторые вторичные зависимости (зависимости зависимостей) простым способом, в том же каталоге, что и первичная зависимость, которая этого требует.
Такое поведение, таким образом, ожидается, вы не делаете ничего плохого.
Если вы все еще используете NPM версии 2, вы, возможно, заметили, что в нем отображаются предупреждающие сообщения об этом изменении разрешения зависимостей:
Peer-зависимость phantomjs-prebuilt@>=1.9, включенная в karma-phantomjs-launcher, больше не будет автоматически устанавливаться для выполнения peerDependency в npm 3+. Ваше приложение должно явно зависеть от него.