Общесистемная дедупликация идентичных узловых модулей - PullRequest
0 голосов
/ 18 января 2020

Я работаю над проектом Javascript, и одна из моих зависимостей получает puppeteer, который, в свою очередь, загружает полную копию Chromium в мой node_modules. Мой более крупный проект разделен на несколько Javascript пакетов, поэтому я получаю несколько идентичных копий Chromium среди других вещей.

Есть ли способ дедупликации этих пакетов в масштабе всей системы? Обратите внимание, что npm dedupe, кажется, делает что-то совершенно отличное от того, что я хочу.

Я предполагаю, что в моем домашнем каталоге будет хранилище модулей, которое будет содержать все нужные мне пакеты (в каждой нужной версии), а затем в локальные каталоги node_modules будут содержать только символические ссылки на хранилище. Это кажется невероятно очевидной оптимизацией, но я не могу найти способ сделать это в npm. Если не в npm, возможно ли это в пряже?

Как дополнительное усложнение, это также должно работать на Windows (где символическая c поддержка ссылок исторически была не очень хорошей).

1 Ответ

0 голосов
/ 18 января 2020

Кажется, следующая команда делает то, что я хочу:

npm config set link -g

Затем удалите node_modules и снова выполните npm install. Теперь он должен быть намного меньше.

Документация гласит:

Если true, то при локальной установке будет установлен подходящий глобально установленный пакет.

Обратите внимание, что это означает, что локальная установка может привести к одновременной установке объектов в глобальное пространство. Ссылка выполняется только в том случае, если выполняется одно из двух условий:

  • Пакет еще не установлен глобально, или
  • глобально установленная версия идентична версии, которая используется установлен локально.

Я не уверен, имеет ли это какие-либо негативные побочные эффекты - например, засорение глобального пространства имен командами, которые мне не нужны. На данный момент, похоже, работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...