javascript - 动态导入 d3.js 作为模块?

标签 javascript d3.js ecmascript-6 import

尝试从现有模块中动态导入(“延迟加载”)d3 作为模块,以使其独立,按照 es6 语法功能( https://developers.google.com/web/updates/2017/11/dynamic-import#dynamic )。来源https://d3js.org/d3.v5.min.js不包含“导出”语句,仅包含文字函数调用(

!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n(t.d3=t.d3||{})}(...)

),但它确实被检索到了,只是它没有收到正常 <script src="https://d3js.org/d3.v5.min.js"/> 所期望的参数。标签导入。我如何手动提供它们,或者我应该如何做到这一点?谢谢!

import('https://d3js.org/d3.v5.min.js').then(function(d3){d3.json()})


d3.v5.min.js:2 Uncaught (in promise) TypeError: Cannot read property 'd3' of undefined
at d3.v5.min.js:2

最佳答案

我的第一个猜测是错误的......
发生此错误是因为 d3 的此版本正在尝试读取 this.d3(接收 this 的函数参数称为 global,或缩小版本中的 t),但 this 在模块上下文中未定义(当 imported 时,脚本在其中运行) )。

这只是用于生成此 d3 构建的任何构建工具中的一个错误。它应该使用 self (或者可能是 this || self)。

rollup 例如曾经有这个错误,但不久前已修复。


无论如何,即使修复了d3之后,你也不会在.then()中得到任何东西,它会设置d3全局。 (除非他们发布 ES 模块版本。)

关于javascript - 动态导入 d3.js 作为模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54725892/

相关文章:

javascript - 移动动画 Accordion 中的所有元素

javascript - 正则表达式,如果前面没有符号则获取序列

JavaScript 单元测试。 mock 什么?

javascript - D3.js 线性回归

javascript - D3.js 中的协调饼图和条形图

javascript - d3js多图自动更新

javascript - 如何更改来自 React 中 props 的输入值?

javascript - knockout 不绑定(bind)值

javascript - 将平面结构转换为对象

javascript - 简化 useState 的多个实例