用Webpack导入/编译d3 v4
我最近将PostCSS,Gulp和Webpack整合到了我的工作stream程中,但是学习曲线非常陡峭(尤其是Webpack!),并且在编译d3时遇到了问题。 我已经用npm install d3安装了d3 –save,并尝试将其导入为:
var d3 = require("d3");
哪个没用 我尝试安装一个装载机 ,添加
new webpack.ProvidePlugin({ d3: "d3" }),
到我的webpack.config文件并导入为
var d3 = require("d3!");
哪个也没用 我已经尝试了这里和这里的东西(最后回答加载器)以及。
我从我的浏览器中得到以下错误:
Uncaught ReferenceError: d3 is not defined
在命令行中,gulp给了我下面的错误:
..../node_modules/loader-runner/lib/loadLoader.js:35 throw new Error("Module '" + loader.path + "' is not a loader (must have normal or pitch function)");
我的代码回购在这里 。
提前致谢!
装载机没有工作的原因是因为在Webpack 2中,全名是必须的:
var d3 = require('d3-webpack-loader!');
然而,因为这个加载器不兼容Webpack 2(在这个时候),所以可以使用正常的d3
软件包。 然而在一个Node env中(记住Gulp / Webpack是在Node中运行的), build/d3.node.js
版本是默认导入的,这不是你想要的,所以下面的webpack别名会解决这个问题:
resolve: { alias: { d3: 'd3/build/d3.js' } },
将此添加到您的webpack.config.js
。 有了这个,你可以继续使用:
var d3 = require('d3');
只是觉得我会指出,从v3到v4的d3更新是相当具有破坏性的。 我遇到了类似的问题,直到我意识到d3代码在几乎所有情况下都发生了变化。
通过使用,我可以正常使用webpack导入d3(作为节点模块安装)
import * as d3 from "d3";
之后,错误使得它看起来像d3没有被导入,但是这是因为我使用的是D3风格的代码。
例如:
d3.layout.pie()
现在简单地说:
d3.pie()
重构后,一切都按预期工作。 我不确定这是不是你的问题的原因,但这是要注意的事情。