npm не выравнивает локальные зависимости

#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.

Итак:

  1. Я вообще все делаю правильно, используя локальные file: URL-адреса и / или ссылки для разработки библиотек?
  2. Могу ли я каким-то образом заставить npm не использовать node_modules каталог из B и вместо этого создать свой собственный, который он сгладит?
  3. Могу ли я как-то заставить webpack сглаживаться?