私はD3の力の有向グラフ、 D3.v4のhttps://bl.ocks.org/mbostock/4062045。すべて最新の完全なD3ビルド/バンドルでうまく動作します。D3.v4モジュールバンドルと完全なD3バンドルを使用しているときにフォースグラフが破損する
ロードされたJSライブラリのサイズを縮小したいので、ロールアップベースのhttps://www.npmjs.com/package/d3-v4-bundlerを使用してしまいました。私の他の無関係なD3.v4グラフは、ロールアップでバンドルされた「手で選んだ」モジュールとメソッドでうまく動作しますが、d3-forceでは何か問題があります。
D3-力のメソッドを使用しようとしたコードですでに早くから:
var simulation = d3.forceSimulation()
.force("link", d3.forceLink().id(function (d) { return d.id; }))
.force("charge", d3.forceManyBody())
.force("center", d3.forceCenter(svgwidth/2, svgheight/2));
エラーがスローされます。「キャッチされない例外TypeError:未定義のプロパティ 『力』を読み込めません」。
私はd3-v4-bundlerのモジュールとメソッドのすべての組み合わせを試しましたが、「d3」からすべてを書き出す場合、つまり、すべてを使用する場合にのみ、強制的なグラフが機能します。すべてのモジュールを個別にバンドルすることは機能しません。 "d3-force"自体は私の知る限り、 "d3-collection"、 "d3-dispatch"、 "d3-quadtree"、 "d3-timer"を必要としますが、これらはすべてd3-v4-bundlerで正しくバンドルされています。
d3.forceSimulation()が強制的に破損するようなバンドルプロセスで欠落する可能性のある「d3-force」に、他の(外部)重要な依存関係はありますか?または、これはd3-v4-bundlerまたはロールアップ自体に根差した問題かもしれませんか?
'npm'または' yarn'を使用していますか?あなたの 'package-lock.json'または' yarn.lock'の中に、さまざまなd3モジュールの重複したバージョンがないことを確認できますか? –
いいえ、それは問題ではないようです。私は今これを細分化まで追跡することができました。 d3-v4-bundlerは、uglify-jsを使用してJSを最小化します。ほとんどのモジュール+メソッドの組み合わせは、未処理または最小化のどちらでもうまく動作するようですが、uglify-jで最小化されたときのd3強制は破損しているようです。だから、間違って縮小されたd3力の "力"の宣言があるかもしれないか、またはuglify-jsがその仕事であまりにも熱心になるように思われる... –