MapConductor React SDK steht jetzt bei 0.2.0. 21 Pakete auf npm, alle unter Apache-2.0.
Nur @mapconductor/react-for-openlayers trägt 0.2.1; warum, steht am Ende.
Was sich geändert hat
- Alle Pakete haben dieselbe Version bekommen. Die internen
@mapconductor/*-Abhängigkeitsbereiche sind mitgezogen, sodass keine ungewollte Mischung von Versionen entsteht. @mapconductor/react-geojson-layerheißt jetzt@mapconductor/react-geojson. Geändert hat sich nur der Paketname;GeoJSONLayer,GeoJSONLayerState,GeoJSONParserund die übrige API bleiben, wie sie waren. Das alte Paket bleibt als 0.1.3 auf npm liegen, wird aber nicht mehr gepflegt.- Vier Pakete sind zum ersten Mal erschienen:
react-for-arcgis,react-for-mappls,react-geojsonundreact-kml. react-for-mapkithat endlich Inhalt. In 0.1.3 lagen nur LICENSE und README bei: Das Paket fehlte in der Liste der Build-Ziele, sodassfiles: ["dist"]auf nichts passte. Wer 0.1.3 verwendet, sollte aktualisieren.- Der Lizenzbezeichner heißt jetzt korrekt
Apache-2.0. Vorher stand dortApache2, was als SPDX-Wert ungültig ist — Werkzeuge lasen das als „nicht erkennbare Lizenz“.
Die Abhängigkeiten zu den Karten-SDKs wurden auf den neuesten Stand innerhalb des deklarierten Bereichs gebracht. Bewegt haben sich dabei nur zwei: maplibre-gl (6.3.0 → 6.4.0) und @turf/turf (7.3.5 → 7.4.0); der Rest war bereits aktuell.
Die Pakete und ihre Karten-SDKs
Drei Anbieter führen kein Karten-SDK als Abhängigkeit, weil ihr SDK nicht über npm verteilt wird. HERE, Apple MapKit JS und Longdo werden zur Laufzeit vom CDN des Anbieters geladen; die tatsächlich laufende Version ist also die, die der Anbieter ausliefert.
Nur react-for-tomtom bleibt bei maplibre-gl 5.x. @tomtom-org/maps-sdk hängt an maplibre-gl@^5.24.0; ein Sprung auf 6.x würde MapLibre zweimal einziehen und dem TomTom-SDK ein Map-Objekt übergeben, mit dem es nicht rechnet.
ESM, CommonJS und SSR
Diese Pakete setzen einen Bundler voraus. Unter Vite, webpack, Next.js und Metro werden sie korrekt aufgelöst; für alle Anbieter haben wir vor der Veröffentlichung das Zeichnen im echten Browser geprüft.
Anders sieht es aus, wenn Nodes eigener Resolver sie direkt lädt — nacktes node, ein SSR-Einstiegspunkt ohne Bundler, die node-Umgebung von Vitest. Der Grund liegt darin, dass die zugrunde liegenden Karten-SDKs Browser-Bibliotheken sind. Die folgende Tabelle stammt aus echten Importen der veröffentlichten Pakete in einem leeren Projekt.
| Paket | import | require() | Grund |
|---|---|---|---|
react-for-arcgis | no | no | @arcgis/core/views/MapView importiert eine .css-Datei, die Node nicht laden kann. Jede Karte braucht MapView, also lässt sich das von unserer Seite nicht umgehen. |
react-for-leaflet | no | no | leaflet greift schon beim Auswerten des Moduls auf window zu. |
react-for-azuremaps | no | no | azure-maps-control greift schon beim Auswerten des Moduls auf window zu. |
react-for-tomtom | no | no | Liest maplibre-gl/package.json, was Node nur mit einem Import-Attribut lädt. |
react-for-mappls | no | yes | mappls-web-maps ist CommonJS; der ESM-Loader kann seine benannten Exporte nicht statisch auswerten. |
react-for-maplibre | yes | no | maplibre-gl v6 ist reines ESM und deklariert keinen CommonJS-Einstiegspunkt. |
react-for-maptiler | yes | no | Wie bei react-for-maplibre. |
Die übrigen 14 Pakete lassen sich auf beiden Wegen laden. Dasselbe Ergebnis gilt schon für 0.1.3 — mit 0.2.0 ist das also nicht neu entstanden.
Zwei Punkte sind es wert, im Kopf behalten zu werden.
- Importieren Sie den Anbieter bei SSR verzögert auf der Client-Seite. Ein statischer Import eines reinen Browser-Anbieters auf oberster Ebene zerlegt jedes Server-Rendering, das nicht durch einen Bundler läuft. Das offizielle Web-Beispiel nutzt
lazy(() => import('./providers/...')), und genau deshalb geht der SSR-Build von Vite durch. react-for-maplibre,react-for-maptilerundreact-for-tomtomdeklarieren einen CommonJS-Einstiegspunkt, der in Wirklichkeit nicht funktioniert.maplibre-glv6 hat CommonJS aufgegeben. Nutzen Sie diese drei als ESM. Dasrequireausexportszu entfernen, holen wir in einer späteren Version nach.
Das eine Problem, das bei uns lag
Dass react-for-openlayers sich unter Node-ESM nicht laden ließ, hatte mit OpenLayers nichts zu tun. Unser eigener Quelltext importierte ol/proj ohne Dateiendung, und Node weist das als Verzeichnis-Import zurück. Bundler lassen es durch, deshalb ist es uns nicht aufgefallen. In 0.2.1 ist es behoben — eine einzige Zeile, und am Verhalten über einen Bundler ändert sich nichts.
Installation
npm install @mapconductor/js-sdk-core @mapconductor/js-sdk-react @mapconductor/react-for-maplibre
Jedes Paket liegt in einem eigenen Repository. Siehe github.com/MapConductor.