#npm #webpack
#npm #webpack
Вопрос:
У меня есть веб-приложение A
, которое использует библиотеки B
и C
, а B
также использует C
(ту же версию):
A -> B, C
B -> C
Оба B
и C
публикуются в реестре npm, и именно так A
их получают. Все это прекрасно работает и npm install
сглаживает ситуацию так, что есть только один экземпляр C
, который A
можно использовать и B
использовать.
Когда я переключаюсь A
на использование B
в качестве локальной зависимости (либо с file:
URL-адресом, либо с npm link
), копия C
from B
видна from A
, и webpack помещает две идентичные копии C
в выходной файл, одну используемую A
и одну используемую B
. Это проблема, потому A
что создает объект из класса и B
выполняет instanceof
этот класс, что приводит к сбою, поскольку классы взяты из разных модулей. (В JavaScript они считаются разными классами.)
Эта проблема npm описывает эту проблему. Он был открыт в течение трех лет без комментариев.
Я пробовал yarn, который дает те же результаты (за исключением того, что все B
скопировано, а не связано).
Я пробовал npm dedupe
, что нанесло большой ущерб B
локальному дереву, так что оно больше не компилировалось. (Я использую TypeScript, если это имеет значение.)
Подробности: npm 6.13.1, webpack 4.46.0.
Итак:
- Я вообще все делаю правильно, используя локальные
file:
URL-адреса и / или ссылки для разработки библиотек? - Могу ли я каким-то образом заставить npm не использовать
node_modules
каталог изB
и вместо этого создать свой собственный, который он сгладит? - Могу ли я как-то заставить webpack сглаживаться?