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に改名しました。 変わったのはパッケージ名だけで、GeoJSONLayer、GeoJSONLayerState、GeoJSONParserなどの API はそのままです。旧パッケージは 0.1.3 のまま npm に残りますが、今後の更新はありません。- 4 つのパッケージを初めて公開しました。
react-for-arcgis、react-for-mappls、react-geojson、react-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
3 つのプロバイダは依存に地図 SDK を持ちません。SDK が npm で配られていないためです。HERE、Apple MapKit JS、Longdo は実行時にベンダーの CDN から読み込まれるので、実際に動くバージョンはベンダーが配信しているものになります。
react-for-tomtom だけ maplibre-gl を 5.x のままにしてあります。@tomtom-org/maps-sdk が maplibre-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 して計測した結果です。
| パッケージ | import | require() | 理由 |
|---|---|---|---|
react-for-arcgis | no | no | @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-leaflet | no | no | leaflet touches window while the module is evaluated. |
react-for-azuremaps | no | no | azure-maps-control touches window while the module is evaluated. |
react-for-tomtom | no | no | Reads maplibre-gl/package.json, which Node will only load with an import attribute. |
react-for-mappls | no | yes | mappls-web-maps is CommonJS, so its named exports cannot be statically analysed by the ESM loader. |
react-for-maplibre | yes | no | maplibre-gl v6 is ESM-only and declares no CommonJS entry. |
react-for-maptiler | yes | no | Same as react-for-maplibre. |
残り 14 パッケージは両方で読み込めます。この結果は 0.1.3 でも同一なので、0.2.0 で新たに起きたことではありません。
押さえておくとよい点が 2 つあります。
- SSR では、プロバイダをクライアント側で遅延 import してください。 ブラウザ専用プロバイダをトップレベルで静的 import すると、バンドラを通らないサーバーレンダリングは壊れます。公式の web サンプルは
lazy(() => import('./providers/...'))を使っており、そのため Vite の SSR ビルドが通っています。 react-for-maplibre・react-for-maptiler・react-for-tomtomは、実際には動かない CommonJS エントリを宣言しています。maplibre-glv6 が CommonJS をやめたためです。この 3 つは ESM でお使いください。exportsからrequireを落とすのは今後のリリースで対応します。
唯一こちら側の原因だったもの
react-for-openlayers が Node ESM で読み込めなかったのは、OpenLayers とは関係のない理由でした。自分たちのソースが ol/proj を拡張子なしで import しており、Node はこれをディレクトリ import として拒否します。バンドラは通してしまうため気付けませんでした。0.2.1 で修正済みです。変更はこの 1 行だけで、バンドラ経由の挙動は変わりません。
インストール
npm install @mapconductor/js-sdk-core @mapconductor/js-sdk-react @mapconductor/react-for-maplibre
各パッケージはそれぞれ独立したリポジトリにあります。github.com/MapConductor をご覧ください。