React SDK 0.2.0 ── 21 パッケージ、改名、そしてバンドラ外で読めないもの

21 パッケージを同一バージョンで公開しました。react-geojson-layer の改名、中身が空だった react-for-mapkit の修正、そしてバンドラ外で何が読めて何が読めないかをまとめています。

MapConductor React SDK が 0.2.0 になりました。npm 上の 21 パッケージ、すべて Apache-2.0 です。 @mapconductor/react-for-openlayers だけ 0.2.1 で、理由は最後に書きます。

変わったこと

  • 全パッケージのバージョンを揃えました。 内部の @mapconductor/* 依存レンジも同時に動かしてあるので、意図しないバージョン混在は起きません。
  • @mapconductor/react-geojson-layer@mapconductor/react-geojson に改名しました。 変わったのはパッケージ名だけで、GeoJSONLayerGeoJSONLayerStateGeoJSONParser などの API はそのままです。旧パッケージは 0.1.3 のまま npm に残りますが、今後の更新はありません。
  • 4 つのパッケージを初めて公開しました。 react-for-arcgisreact-for-mapplsreact-geojsonreact-kml です。
  • react-for-mapkit に中身が入りました。 0.1.3 は LICENSE と README しか含んでいませんでした。ビルド対象の一覧から漏れていて、files: ["dist"] が何にもマッチしていなかったためです。0.1.3 をお使いの場合は上げてください。
  • ライセンス識別子を Apache-2.0 に直しました。 それまで Apache2 という SPDX として不正な値で、ツールからは「識別できないライセンス」として扱われていました。

地図 SDK の依存は、宣言されたレンジ内の最新へ更新しました。実際に動いたのは maplibre-gl(6.3.0 → 6.4.0)と @turf/turf(7.3.5 → 7.4.0)の 2 つだけで、他は既に最新でした。

パッケージと、それぞれが使う地図 SDK

パッケージバージョン地図 SDKリポジトリ
@mapconductor/js-sdk-core0.2.0js-sdk-core
@mapconductor/js-sdk-react0.2.0js-sdk-react
@mapconductor/react-for-arcgis0.2.0@arcgis/core ^5.1.16react-for-arcgis
@mapconductor/react-for-azuremaps0.2.0azure-maps-control ^3.7.0react-for-azuremaps
@mapconductor/react-for-cesium0.2.0cesium ^1.131.0react-for-cesium
@mapconductor/react-for-googlemaps0.2.0@googlemaps/js-api-loader ^2.1.1react-for-googlemaps
@mapconductor/react-for-here0.2.0CDN (global H)react-for-here
@mapconductor/react-for-leaflet0.2.0leaflet ^1.9.4react-for-leaflet
@mapconductor/react-for-longdo0.2.0CDN (api.longdo.com/map3)react-for-longdo
@mapconductor/react-for-mapbox0.2.0mapbox-gl ^3.15.0react-for-mapbox
@mapconductor/react-for-mapkit0.2.0CDN (cdn.apple-mapkit.com)react-for-mapkit
@mapconductor/react-for-maplibre0.2.0maplibre-gl ^6.0.0react-for-maplibre
@mapconductor/react-for-mappls0.2.0mappls-web-maps ^3.8.1react-for-mappls
@mapconductor/react-for-maptiler0.2.0maplibre-gl ^6.0.0react-for-maptiler
@mapconductor/react-for-openlayers0.2.1ol ^10.2.1react-for-openlayers
@mapconductor/react-for-tomtom0.2.0@tomtom-org/maps-sdk ^0.51.0, maplibre-gl ^5.24.0react-for-tomtom
@mapconductor/react-geojson0.2.0react-geojson
@mapconductor/react-heatmap0.2.0react-heatmap
@mapconductor/react-icons0.2.0react-icons
@mapconductor/react-kml0.2.0react-kml
@mapconductor/react-marker-clustering0.2.0react-marker-clustering

3 つのプロバイダは依存に地図 SDK を持ちません。SDK が npm で配られていないためです。HEREApple MapKit JSLongdo は実行時にベンダーの CDN から読み込まれるので、実際に動くバージョンはベンダーが配信しているものになります。

react-for-tomtom だけ maplibre-gl を 5.x のままにしてあります。@tomtom-org/maps-sdkmaplibre-gl@^5.24.0 に依存しているためで、6.x に上げると MapLibre が 2 つ入り、TomTom SDK が想定していない map オブジェクトを渡すことになります。

ESM・CommonJS・SSR

これらのパッケージはバンドラを前提にしています。Vite・webpack・Next.js・Metro では正しく解決され、全プロバイダについてリリース前に実ブラウザでの描画を確認しています。

一方、Node 自身の解決器に直接読ませる場合 ── 素の node、バンドラを通らない SSR エントリ、Vitest の node 環境など ── は話が別です。基盤となる地図 SDK がブラウザ用ライブラリだからです。公開済みパッケージを空のプロジェクトで実際に import して計測した結果です。

パッケージimportrequire()理由
react-for-arcgisnono@arcgis/core/views/MapView imports .css, which Node cannot load. Any map needs MapView, so this cannot be worked around from our side.
react-for-leafletnonoleaflet touches window while the module is evaluated.
react-for-azuremapsnonoazure-maps-control touches window while the module is evaluated.
react-for-tomtomnonoReads maplibre-gl/package.json, which Node will only load with an import attribute.
react-for-mapplsnoyesmappls-web-maps is CommonJS, so its named exports cannot be statically analysed by the ESM loader.
react-for-maplibreyesnomaplibre-gl v6 is ESM-only and declares no CommonJS entry.
react-for-maptileryesnoSame as react-for-maplibre.

残り 14 パッケージは両方で読み込めます。この結果は 0.1.3 でも同一なので、0.2.0 で新たに起きたことではありません。

押さえておくとよい点が 2 つあります。

  • SSR では、プロバイダをクライアント側で遅延 import してください。 ブラウザ専用プロバイダをトップレベルで静的 import すると、バンドラを通らないサーバーレンダリングは壊れます。公式の web サンプルは lazy(() => import('./providers/...')) を使っており、そのため Vite の SSR ビルドが通っています。
  • react-for-maplibrereact-for-maptilerreact-for-tomtom は、実際には動かない CommonJS エントリを宣言しています。 maplibre-gl v6 が CommonJS をやめたためです。この 3 つは ESM でお使いください。exports から require を落とすのは今後のリリースで対応します。

唯一こちら側の原因だったもの

react-for-openlayers が Node ESM で読み込めなかったのは、OpenLayers とは関係のない理由でした。自分たちのソースが ol/proj を拡張子なしで import しており、Node はこれをディレクトリ import として拒否します。バンドラは通してしまうため気付けませんでした。0.2.1 で修正済みです。変更はこの 1 行だけで、バンドラ経由の挙動は変わりません。

インストール

bash
npm install @mapconductor/js-sdk-core @mapconductor/js-sdk-react @mapconductor/react-for-maplibre

各パッケージはそれぞれ独立したリポジトリにあります。github.com/MapConductor をご覧ください。