Когда я использую npm install, устанавливаются определенные пакеты узлов, которые содержат модули вложенных узлов.
Как это:
-node_modules
-packageA
+js
-node_modules <--- needs to be removed/ignored
+jquery
-packageA-sub1
+js
-node_modules <--- needs to be removed/ignored
+jquery
Есть ли способ указать, какие пакеты не должны включать вложенный модуль node_module с областью видимости?
В моем случае есть пакеты, которые включают jquery (packageA и packageA-sub1, sub2, sub3, sub4 и т.д.), и это портит мой веб-сайт, потому что я уже включил jquery в несколько своих плагинов. Единственный способ исправить это - вручную удалить папку node_module внутри папки packageA.
Я пробовал .npmignore, но, похоже, это не сработало:
packageA/node_modules/
packageA/node_modules
/packageA/node_modules
/packageA/node_modules/
Я использую npm 5.8





Вы можете сгладить иерархию node_modules, когда модули разделяют зависимости с одной и той же версией, используя npm dedupe
В документации npm dedupe описывается следующим образом:
Searches the local package tree and attempts to simplify the overall structure by moving dependencies further up the tree, where they can be more effectively shared by multiple dependent packages.
@sksallaj NPM обычно делает это автоматически. Однако оговорка - «с той же версией». Поэтому, если один автор модуля ДУМАЕТ, что ему нужен jQuery 1.12.0, а другой ДУМАЕТ, что ему нужен jQuery 3.0.0, вы все равно получите два разных jQuery. Лично я бы справился с этим не на уровне NPM, а на уровне упаковщика (webpack, gulp, grunt и т. д.) И добавил настраиваемые правила для использования определенного jQuery.
В моем случае у меня есть плагин, который использует множество расширений для одного и того же плагина, и к каждому расширению прикреплен jquery, так что это, возможно, создало для меня проблемы. Dedup удалил из моих пакетов 24 дубликата jquery.
@sksallaj Если плагин является основной точкой входа для ваших расширений и плагин уже включает jquery в качестве зависимости, вы потенциально можете объявить jquery как peerDependency в расширениях.
Поддерживает ли peerDependencies управление версиями jquery? Например, что, если у меня 2.x, а плагин использует 3.x ... или наоборот .. и он работает независимо от используемой версии?
Документация peerDependency рекомендует вам «… удостовериться, что требования к вашему плагину настолько широки, насколько это возможно, и не ограничивать их конкретными версиями патчей». Вам нужно будет объявить диапазон возможных версий для peerDependency на уровне расширения, тогда, если он несовместим с версией «хоста» (например, версией, объявленной в плагине), он не сможет установить, потому что одноранговая зависимость не встречал.
Не буду лгать .. Я искал этот ответ в течение 6 часов .. Затем, после того, как я разместил вопрос, я нашел решение в течение десяти минут.