Это обычная головоломка для библиотек внешнего интерфейса.
Это правда, что веб-пакет может предложить некоторые решения, такие же, как для Rollup (который является движком сборки, используемым Leaflet).
Что касается import Dynami c, он прекрасно работает, когда вы создаете приложение, и импорт Dynami c управляется вашим механизмом сборки, но я не буду полагаться на него при написании библиотеки, для которой вы не знаете, если среда / Механизм сборки, используемый проектом-потребителем, будет поддерживать его.
В вашем случае вы даже можете избавить себя от необходимости использовать механизм сборки и необходимость играть, пытаясь правильно его настроить.
все, вы правильно заметили (и следовали соглашению Leaflet), что большинство плагинов Leaflet ничего не экспортируют в глобальную область или в импортер, но имеют побочный эффект добавления некоторого поведения в пространство имен Leaflet L
. Таким образом, при использовании средства импорта движка сборки нам просто нужно сделать:
import "leaflet";
import "leaflet-arrowheads"; // nothing in curly braces
Поэтому вашей библиотеке даже не нужно ничего экспортировать (т. Е. Вы можете избавиться от export default
до вашего L.Polyline.include
).
Теперь вы можете начать искать возможное решение: иметь общий файл для импорта и сценария HTML, содержащий только ваш код L.Polyline.include
; у вас есть отдельный файл записи импорта (то есть то, на что вы ссылаетесь в package.json/main
, который импортирует ваши зависимости и ваш общий файл. Кстати, вы даже можете импортировать Leaflet в этот файл!
пакет. json
{
"main": "index.js" // npm convention, not even needed if your file is named "index.js"
}
index. js
import "leaflet";
import "leaflet.geometryutil";
import "./src/leaflet-arrowheads.js"; // common file
src / leaflet-arrowheads. js
L.Polyline.include() // etc.
Затем у вас есть один общий файл для обслуживания, нет необходимости использовать отдельную ветку, все публикуется в npm, т.е. бесплатные CDN (например, unpkg, cdn js и jsDelivr) смогут напрямую обслуживайте ваш общий файл, готовый к HTML использованию сценария!
Последнее, что беспокоит, это ваша зависимость: в случае импорта стилей узлов это нормально, так как ваш пакет перечисляет его как зависимость, поэтому он будет быть установленным вместе с вашим пакетом, и вы должным образом импортируете его в индексный файл.
Но для сценария HTML вам все равно придется импортировать зависимость «вручную», то есть вы все равно должны сообщать пользователям вашего библиотека, чтобы включить зависимость в го eir HTML scripts.
Этого можно избежать, связав зависимость с вашим плагином, как правило, введя теперь движок сборки. В этом случае обычной практикой является создание нескольких версий: 1 со всеми связанными зависимостями, так что пользователю вашей библиотеки требуется только 1 импорт; 1 только с вашим кодом, позволяя пользователю вашей библиотеки управлять импортом зависимостей (обычно так, чтобы они имели контроль над версией, а также могли использовать их directclty без дублирования кода и т. Д. c.). Для этого указанный выше индексный файл также используется в качестве точки входа в сборку. Затем вы должны указать, что не включать в комплект: исключить Leaflet и, возможно, Leaflet-geometryUtil.