У меня есть два модуля jspm, ModuleA и ModuleB. Оба зависят от библиотеки d3.js. У меня есть третий модуль jspm, ModuleC, который зависит от ModuleA и ModuleB. Когда я запускаю ModuleC, я получаю ошибки d3, хотя ModuleA и ModuleB работают изолированно.

Это происходит потому, что ModuleA полагается на плагин d3 (nvd3), который добавляет функциональность экземпляру d3, предоставляемому SystemJS. Однако при загрузке ModuleB он заменяет эту версию d3 своей собственной свежей версией d3, эффективно стирая плагин, на который полагается ModuleA.

Как я могу настроить SystemJS для предоставления одного и того же экземпляра d3 как ModuleA, так и ModuleB?

1
Nathan Friend 7 Июл 2016 в 18:35

1 ответ

Лучший ответ

Догадаться. SystemJS действительно предоставляет один и тот же экземпляр модулей по умолчанию. Однако запрошенные модули должны быть одной и той же версии и из одного источника.

В моем случае ModuleA напрямую зависел от d3 через jspm install d3, который извлек свою версию d3 из GitHub. ModuleB зависел от d3 косвенно через зависимость от angular-nvd3, которая в конечном итоге разрешилась до версии d3 для npm. Поскольку SystemJS не мог узнать, что это одна и та же библиотека, он загрузил обе версии.

После того, как я обновил ModuleA для использования версии d3 для npm (jspm install npm:d3@3.5.17), оба модуля отлично работали в ModuleC, а d3 был загружен только один раз.

2
Nathan Friend 8 Июл 2016 в 16:50