Finesse
@Finesse

Как заставить NPM не включать зависимости по много раз?

В результате выполнения команды npm install получается директория с пакетом, в которой содержатся все его зависимости. Причём включены абсолютно все зависимости, даже если они уже установлены глобально. А иногда один пакет включается в список зависимостей несколько раз:

user$ npm ls -g
/usr/local/lib
├─┬ gulp@3.9.0
│ ├── archy@1.0.0
│ ├─┬ chalk@1.1.0
│ │ ├── ansi-styles@2.1.0
│ │ ├── escape-string-regexp@1.0.3
│ │ ├─┬ has-ansi@2.0.0
│ │ │ └── ansi-regex@2.0.0
│ │ ├─┬ strip-ansi@3.0.0
│ │ │ └── ansi-regex@2.0.0
│ │ └── supports-color@2.0.0


В результате пакеты, выполняющие простые функции, весят десятки мегабайт.

Собственно, вопрос: можно ли как-то выполнить установку пакета так, чтобы уже имеющиеся в зависимостях пакеты не копировались, а подключались ссылкой? Если нет, то есть ли альтернатива, которая не расходует место на диске так активно?
  • Вопрос задан
  • 507 просмотров
Решения вопроса 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
даже если они уже установлены глобально

Ставить пакеты глобально не рекомендуется еще со времен node 0.6, ЕМНИП. Поэтому, даже если он глобально установлен, npm все равно поставит его локально.

включается в список зависимостей несколько раз

Все правильно, npm спасает вас от dependency hell'а. Сегодня has-ansi и strip-ansi требуют одну и ту же версию ansi-regex, а завтра has-ansi требует уже 3.x — это уже конфликт и придется переносить ansi-regex обратно внутрь. Аналогично с глобально установленными пакетами. А если речь о библиотеке, которую требуют десятки ваших зависимостей только первого уровня (например, underscore или lodash), и у всех разная версия?

В npm 3 обещают делать дерево зависимостей максимально плоским, возможно, там будет какая-то оптимизация на эту тему — попробуйте, бета уже есть.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы