Node.js内でD3を呼び出そうとしています。最初に、スクリプトタグを使用してD3のWebサイトからd3.v2.jsをインポートしようとしましたが、次のスレッドを読みました。
D3の作者が「npm install d3」をすべきだとアドバイスしているところで...私はこれを行い、ノードコンソールで正常に呼び出すことができます:
dpc@ananda:$ node
> var d3 = require("d3");
undefined
> d3.version;
'2.8.1'
ただし、app.jsから「node app.js」を使用して起動しようとすると、次のようになります。
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
TypeError: Cannot read property 'BSON' of undefined
at /Users/dpc/Dropbox/sync/Business/MindfulSound/Development/nad.am/nadam/node_modules/mongoose/node_modules/mongodb/lib/mongodb/index.js:45:44
他の場所では、D3の作者がキャンバスを必要とすることを明確に指定していることを理解しています。
https://github.com/mbostock/d3/blob/master/examples/node-canvas/us-counties.js
なので:
var Canvas = require("canvas");
しかし、それでも(そして、app.jsのrequireステートメントでd3.v2.jsの代わりにindex.jsを特に必要としても)、Jadeテンプレート内で動作するように以下を取得することはできません:
- script('/javascripts/d3.v2.js')
h1 Dashboard
section.css-table
section.two-column
section.cell
hr.grey
h2 Statistics
#mainGraph
script(type="text/javascript")
var Canvas = require("canvas");
var w = 400,
h = 400,
r = Math.min(w, h) / 2,
data = d3.range(10).map(Math.random).sort(d3.descending),
color = d3.scale.category20(),
arc = d3.svg.arc().outerRadius(r),
donut = d3.layout.pie();
var vis = d3.select("body").append("svg")
.data([data])
.attr("width", w)
.attr("height", h);
var arcs = vis.selectAll("g.arc")
.data(donut)
.enter().append("g")
.attr("class", "arc")
.attr("transform", "translate(" + r + "," + r + ")");
var paths = arcs.append("path")
.attr("fill", function(d, i) { return color(i); });
paths.transition()
.ease("bounce")
.duration(2000)
.attrTween("d", tweenPie);
paths.transition()
.ease("elastic")
.delay(function(d, i) { return 2000 + i * 50; })
.duration(750)
.attrTween("d", tweenDonut);
function tweenPie(b) {
b.innerRadius = 0;
var i = d3.interpolate({startAngle: 0, endAngle: 0}, b);
return function(t) {
return arc(i(t));
};
}
function tweenDonut(b) {
b.innerRadius = r * .6;
var i = d3.interpolate({innerRadius: 0}, b);
return function(t) {
return arc(i(t));
};
section.cell
hr.grey
h2 Achievements
Node内でD3を使用する正しい方法は、NPMを使用してd3をインストールし、require
にインストールすることです。_npm install d3
_またはpackage.jsonファイル、その後に_npm install
_が続きます:
_{
"name": "my-awesome-package",
"version": "0.0.1",
"dependencies": {
"d3": "3"
}
}
_
Node_modulesディレクトリにd3を配置したら、requireでロードします。
_var d3 = require("d3");
_
以上です。
その他の問題に関して:D3を使用するためにCanvasは必要ありません。リンクしたノードキャンバスの例では、キャンバスにレンダリングされるため、キャンバスが必要です。 TypeError(未定義のプロパティ 'BSON'を読み取れません)は、D3ではなくmongoose/monogdbの使用に関連しているようです。
import
の代わりにES6のrequire
で使用するには:
import * as d3 from 'd3';
これはおそらく経験豊富なbabel/ES6-userにとって明らかであり、これは古い質問であることは知っていますが、私はこれを理解しようとしてここに来ました。これが誰かに役立つことを願っています。
import
とrequire
の詳細が見つかりました こちら
JS-Dom上に構築された d3-node を試してください。 D3のヘルパーがあります。
Yarnまたはnpmを使用してjsdomをインストールする必要があります。 Node.jsはデフォルトではdomをサポートしていないため、dom要素を作成するためにjsdomを使用する必要があります。フェッチ操作を除く他のすべての操作にはd3を使用します。つまり、d3.xml、d3.tsv
import jsdom from 'jsdom';
import * as d3 from 'd3';
const { JSDOM } = jsdom;
JSDOM.fromURL(
'your resource url',
).then((dom) => {
const doc = dom.window.document;
const states = d3
.select(doc)
.select('path')
.attr(':fme:ID');
console.log(states);
});
ファイルからdomを作成する
JSDOM.fromURL(
'your resource url',
).then((dom) => {
const doc = dom.window.document;
}
hTML文字列のdom
const dom = new JSDOM(
`<p>Hello
<img src="foo.jpg">
</p>`,
{ includeNodeLocations: true }
);