Предотвратить область видимости node_modules внутри node_modules

Когда я использую 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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
329
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сгладить иерархию 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.

Не буду лгать .. Я искал этот ответ в течение 6 часов .. Затем, после того, как я разместил вопрос, я нашел решение в течение десяти минут.

sksallaj 25.04.2018 02:21

@sksallaj NPM обычно делает это автоматически. Однако оговорка - «с той же версией». Поэтому, если один автор модуля ДУМАЕТ, что ему нужен jQuery 1.12.0, а другой ДУМАЕТ, что ему нужен jQuery 3.0.0, вы все равно получите два разных jQuery. Лично я бы справился с этим не на уровне NPM, а на уровне упаковщика (webpack, gulp, grunt и т. д.) И добавил настраиваемые правила для использования определенного jQuery.

slebetman 25.04.2018 02:28

В моем случае у меня есть плагин, который использует множество расширений для одного и того же плагина, и к каждому расширению прикреплен jquery, так что это, возможно, создало для меня проблемы. Dedup удалил из моих пакетов 24 дубликата jquery.

sksallaj 25.04.2018 02:33

@sksallaj Если плагин является основной точкой входа для ваших расширений и плагин уже включает jquery в качестве зависимости, вы потенциально можете объявить jquery как peerDependency в расширениях.

Jake Holzinger 25.04.2018 02:40

Поддерживает ли peerDependencies управление версиями jquery? Например, что, если у меня 2.x, а плагин использует 3.x ... или наоборот .. и он работает независимо от используемой версии?

sksallaj 25.04.2018 03:05

Документация peerDependency рекомендует вам «… удостовериться, что требования к вашему плагину настолько широки, насколько это возможно, и не ограничивать их конкретными версиями патчей». Вам нужно будет объявить диапазон возможных версий для peerDependency на уровне расширения, тогда, если он несовместим с версией «хоста» (например, версией, объявленной в плагине), он не сможет установить, потому что одноранговая зависимость не встречал.

Jake Holzinger 25.04.2018 05:47

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