Почему 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+. Ваше приложение должно явно зависеть от него.

Другие вопросы по тегам