2017-12-26 5 views
1

私は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またはロールアップ自体に根差した問題かもしれませんか?

+0

'npm'または' yarn'を使用していますか?あなたの 'package-lock.json'または' yarn.lock'の中に、さまざまなd3モジュールの重複したバージョンがないことを確認できますか? –

+0

いいえ、それは問題ではないようです。私は今これを細分化まで追跡することができました。 d3-v4-bundlerは、uglify-jsを使用してJSを最小化します。ほとんどのモジュール+メソッドの組み合わせは、未処理または最小化のどちらでもうまく動作するようですが、uglify-jで最小化されたときのd3強制は破損しているようです。だから、間違って縮小されたd3力の "力"の宣言があるかもしれないか、またはuglify-jsがその仕事であまりにも熱心になるように思われる... –

答えて

1

私の問題に対する答えを見つけましたが、その背後に理由はありません。

何らかの理由で、私の選択したd3モジュール内のd3-forceまたはコンテンツのいくつかのコンテンツが、d3-v4-bundlerのUglifyjsで「強制」解読を壊すように縮小されます。 d3-v4-bundlerのuglifyjsコマンドから "-c negate_iife = false"パラメータを削除すると、d3-forceで生成されたグラフに対して、縮小されたコードでも機能します。もちろん、最小化率はそれほど良いものではありませんが、明らかにバリュー・コンソリデーションの何かが壊れてしまいます。

私自身は大きな専門家ではありませんが、実際の部品が追跡できれば便利です。 "-c negate_iife = false"は、d3-forceが追加されるか、少なくとも私には見えるようになるまで、他のモジュールバンドルに対してうまくいきました。

関連する問題