ロールアップと ES2015 モジュールで記述された D3 バージョン 4 を使い始めています。従来の D3 名前空間「d3」を使用していくつかのコードを作成しました。ここで、ロールアップを使用してカスタム バンドルを作成したいと考えています。おそらくd3の関数の約半分しか使用していないため、ツリーシェイキングを使用したいと考えており、できるだけ軽量に保ちたいと考えています。
関数を選択的にインポートできることは明らかです。たとえば、次のようになります。
import {scaleLinear} from "d3-scale";
import {
event,
select,
selectAll
} from "d3-selection";
d3 の半分は多くの関数であるため、非常に冗長になります。私はそれで暮らすことができます。より大きな問題は、名前空間なしですべての関数識別子を完全に書き直す必要があることです。私は名前空間ライブラリ コードの方が好きなので、あまり気にしません。
すべてのモジュールをインポートできることを理解しています:
import * as d3 from "d3";
これにより、d3 オブジェクトの名前空間が保持されます。これは、私のコード編成に適しています。しかし、Rollup は未使用の関数をバンドルからツリーシェイクすることはできません。
私が夢見ているのは次のようなものです:
import {
event,
select,
selectAll
} as d3 from "d3-selection";
しかし、そのような機能/構文は仕様に存在しないようです。モジュールの個々の部分を選択的にターゲットにし、インポート中に名前空間を保持するにはどうすればよいですか?