«Npm install» устанавливает все зависимости в каталог node_modules, вместо того, чтобы их вкладывать

37

Мне нужно знать, нормально ли следующее поведение.

Когда я npm install, каждый пакет из моего package.json и зависимостей больше не устанавливается вложенным, но каждая зависимость устанавливается в node_modules. Это приводит к тому, что моя директория node_modules взорвана и выглядит следующим образом:

Изображение 252

Это произошло после обновления npm и node.

Теперь я запускаю:

npm -v 3.3.6
node -v 4.2.1
python 2.7
windows 7
wamp

Мой файл package.json выглядит следующим образом:

{
  "private": true,
  "devDependencies": {
    "gulp": "^3.8.8"
  },
  "dependencies": {
    "laravel-elixir": "^3.0.0",
    "bootstrap-sass": "^3.0.0"
  }
}

Это стандартный файл laravel package.json.

Есть ли способ снова вставить вложенные каталоги, потому что мне не нравится такая взорванная статья с более чем 100 подкаталогами.

Теги:
npm

2 ответа

31
Лучший ответ

Что такое новое поведение npm 3 в соответствии с этот блог npm.

  • 0
    Спасибо, Сэги, я думаю, что нет способа сделать его снова вложенным, чтобы избежать раздутого каталога, не так ли? (Также нужно подождать 5 минут, прежде чем вы сможете принять ваш ответ как правильный)
  • 9
    Квартира лучше, как я ее вижу. Как пользователь Windows, действительно ужасно удалять слишком много вложенных модулей, поскольку он действительно быстро проходит 256 максимальных символов (или это было 1024, не помню). Также я помогаю при обновлении модулей, так как теперь он может лучше использовать существующие установки и не заменять все, что находится в обновленном модуле, так как, возможно, его зависимости не изменились. Итог, это намного быстрее и чище, таким образом.
Показать ещё 2 комментария
55

Да, есть способ снова вставить вложенные каталоги, изменив поведение по умолчанию npm (версия 3 на момент написания):

  • Удалить текущую папку node_modules.

  • Сообщите npm для установки с устаревшим пакетом для этой установки:

    npm install --legacy-bundling

"Постоянная" альтернатива:

  1. Задайте конфигурацию npm, чтобы всегда использовать устаревшее связывание...

    npm set legacy-bundling=true

  2. .. и выполняйте как обычно:

    npm install

Примечание. выборки зависимостей с устаревшим пакетом потребует гораздо больше времени, потому что будет установлено много разных версий одинаковых зависимостей.

Отказ от ответственности:. Как пользователь, не являющийся пользователем Windows, мне не нужны плоские зависимости и вы хотите легко найти самозапрошенные зависимости в пользу автоматической дедупликации. Поскольку установка зависимостей npm без устаревшего пакета уже занимает невероятное количество времени, я обычно готов потратить эти дополнительные минуты на установку. Он возвращается к 5 каталогам из более 700 + (...) в настройке El Larvel Elixir с бутстрапом (не-sass), шрифтом-awesome и jquery.

  • 1
    Этот ответ был очень полезен для меня в моем конкретном случае. Описывая здесь для потомков: я пытался собрать package.json с зависимостями для существующего проекта узла. используя npm install <list of packages I require> --legacy-bundling --save записывает только прямые зависимости в package.json. Затем я выполнил rm -rf node_modules && npm install , чтобы получить новый каталог flat node_modules. Это лучшее из обоих миров для меня.
  • 3
    Я также считаю это правильным ответом, так как он прямо отвечает ОП на утвердительный ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню