次のようなファイルがありますd3.custom.build.js
(簡略化):
import { range } from 'd3-array';
import { select, selectAll, event } from 'd3-selection';
import { transition } from 'd3-transition';
export default {
range,
select,
selectAll,
event,
transition
};
そして、rollup.config.js
このような:
import nodeResolve from 'rollup-plugin-node-resolve';
export default {
entry: './js/vendor/d3-custom-build.js',
dest: './js/vendor/d3-custom-built.js',
format: 'iife',
globals: {
d3: 'd3'
},
moduleId: 'd3',
moduleName: 'd3',
plugins: [nodeResolve({ jsnext: true })]
};
「d3」という名前のプレーンな古いブラウザー グローバルにエクスポートしたいと考えています。簡単な npm スクリプトからロールアップを呼び出しています。良いニュースは、1 つのことを除いて、ほとんどすべてが出力ファイルで機能することです:d3.event
ブラウザーでは常に null です。いいえ、ページでイベントがハイジャックされても問題ありません。標準の完全な d3 4.0 ライブラリをスクリプト タグにスワップすると、すべて正常に動作します。それは間違いなくビルドの問題です。
d3 docsは、バンドルevent
が難しいことを警告しています:
Babel、Webpack、または別の ES6-to-ES5 バンドラーを使用する場合は、イベント中に d3.event の値が変化することに注意してください。d3.event のインポートはライブ バインディングでなければならないため、生成された UMD バンドルからではなく、D3 の ES6 モジュールからインポートするようにバンドラーを構成する必要がある場合があります。すべてのバンドラーが jsnext:main を監視するわけではありません。また、window.event グローバルとの競合にも注意してください。
設定nodeResolve({ jsnext: true })
が不十分なようです。バンドルでライブ バインディングを取得するにはどうすればよいですか? どんなガイダンスでも大歓迎です。