尝试从现有模块中动态导入(“延迟加载”)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
在模块上下文中未定义(当 import
ed 时,脚本在其中运行) )。
这只是用于生成此 d3
构建的任何构建工具中的一个错误。它应该使用 self
(或者可能是 this || self
)。
rollup
例如曾经有这个错误,但不久前已修复。
无论如何,即使修复了d3
之后,你也不会在.then()
中得到任何东西,它会设置d3
全局。 (除非他们发布 ES 模块版本。)
关于javascript - 动态导入 d3.js 作为模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54725892/