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

Я строю код своего веб-сайта с помощью модулей webpack и npm и столкнулся со следующей проблемой:

Мой код использует jQuery 3.1.1 и добавляет к нему несколько плагинов. Я также использую зависимость, которая имеет суб-зависимость от jQuery <= 2.2.4. Проблема в том, что объекты субзависимости, очевидно, не знают о моих плагинах jQuery, так как модуль использует другую версию jquery.

Как заставить все зависимости (верхнего уровня и вложенных) использовать одну версию jQuery? Чтобы require("jquery") всегда разрешается в jQuery 3.1.1.

Я попытался использовать npm shrinkwrap, чтобы переопределить версию зависимости, но это, похоже, не работает. Это мой модифицированный файл термоусадочной пленки:

{
  "name": "example",
  "version": "0.1.0",
  "dependencies": {
    "can": {
      "version": "2.3.27",
      "from": "can@>=2.3.23 <3.0.0",
      "resolved": "https://registry.npmjs.org/can/-/can-2.3.27.tgz",
      "dependencies": {
        "jquery": {
          "version": "3.1.1",
          "from": "^3.1.1"
        }
      }
    }
  }
}

Но зависимость модуля по-прежнему jQuery 2.2.4 и npm install печать npm ERR! invalid: jquery@3.1.1 /path/.../can/node_modules/jquery

Решения для решения проблемы с webpack вместо npm также принимаются.

2 ответа

Я сам нашел решение, используя псевдоним веб-пакета.

resolve: {
    root: __dirname,
    alias: {
        "jquery": "node_modules/jquery/src/jquery",
    }
}

Теперь каждый модуль, который использует require('jquery') загружает модуль jquery, расположенный под путем псевдонима, независимо от указанной версии в package.json модуля.

Я оставляю вопрос открытым, поскольку для этого решения требуется веб-пакет, и мне было бы интересно, если бы существовало решение только для npm.

Следуя ответу @McFarlane, это безопасный способ установить псевдоним вместо использования необработанных путей:

      {
    resolve: {
        alias: {
            "jquery": require.resolve("jquery"),
        }
    }
}
Другие вопросы по тегам