【问题标题】:Importing / Compiling d3 v4 with Webpack使用 Webpack 导入/编译 d3 v4
【发布时间】:2017-10-06 07:04:09
【问题描述】:

我最近在我的工作流程中加入了 PostCSS、Gulp 和 Webpack,但是学习曲线非常陡峭(尤其是 Webpack!)而且我在编译 d3 时遇到了问题。我已经使用 npm install d3 --save 安装了 d3 并尝试将其导入为:

var d3 = require("d3");

这没有用。我尝试安装loader,添加

     new webpack.ProvidePlugin({
        d3: "d3"
    }),

到我的 webpack.config 文件并导入为

var d3 = require("d3!");

这也不起作用。我也试过 here here (last answer re the loader) 的东西。

我的浏览器出现以下错误:

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)");

我的代码仓库是here

提前致谢!

【问题讨论】:

    标签: javascript node.js d3.js webpack


    【解决方案1】:

    我只是想指出,d3 从 v3 到 v4 的更新非常具有破坏性。我遇到了与您提到的类似的问题,直到我意识到 d3 代码在几乎所有情况下都发生了变化。

    我能够通过使用 webpack 正常导入 d3(作为节点模块安装)

    import * as d3 from "d3";
    

    之后,错误使它看起来像 d3 没有被导入,但这是因为我使用的是 d3 v3 样式代码。

    例如:

    d3.layout.pie() 
    

    现在很简单:

    d3.pie()
    

    重构后,一切都按预期工作。 我不确定这是否是您的问题的原因,但需要注意这一点。

    【讨论】:

      【解决方案2】:

      加载器不起作用的原因是因为在 Webpack 2 中需要全名:

      var d3 = require('d3-webpack-loader!');
      

      但是,由于这个加载器不兼容 Webpack 2(此时),所以可以使用普通的 d3 包。但是在 Node 环境中(记住 Gulp/Webpack 是在 Node 中运行的),默认导入 build/d3.node.js 版本,这不是您想要的,因此以下 webpack 别名将解决问题:

      resolve: {
          alias: {
              d3: 'd3/build/d3.js'
          }
      },
      

      将此添加到您的webpack.config.js。有了这个,你可以继续使用:

      var d3 = require('d3');
      

      【讨论】:

      • 这解决了问题,虽然我也升级了我的 webpack。现在我收到一个新错误:未捕获的错误:模块构建失败:TypeError:无法读取 getModuleDirectories (/Users/tssuser/work/d3/tut/node_modules/d3-webpack-loader/index.js: 51:38) 在 Object.d3Loader (/Users/tssuser/work/d3/tut/node_modules/d3-webpack-loader/index.js:79:27) .....有什么想法@mikeapr4?
      • 不幸的是,该加载器在 7 个月内没有更新,代码实际上与 Webpack 2 不兼容 :( - 用你的 webpack 配置更新问题,我会看看我是否发现了什么这将导致 npm d3 包无法与 require('d3') 一起使用 - 您也可以检查从此 require 调用返回的对象
      • require('d3') 成功编译了 JS,但由于某种原因,每当我引用 d3 时都会出现引用错误。谢谢!
      • @Tom - 您是否让别名正常工作,还是仍有问题?
      • 不,仍有问题
      猜你喜欢
      • 2016-07-21
      • 1970-01-01
      • 2017-03-11
      • 2020-02-20
      • 2018-08-17
      • 2017-07-05
      • 2020-10-26
      • 2016-11-16
      • 2019-09-04
      相关资源
      最近更新 更多