根据es6语法功能(https://developers.google.com/web/updates/2017/11/dynamic-import#dynamic),尝试从现有模块中动态导入(“延迟加载”)d3作为模块以使其自立。 https://d3js.org/d3.v5.min.js的源不包含“ export”语句,仅包含文字函数调用(
!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
答案 0 :(得分:3)
我的第一个猜测是错误的...
发生此错误的原因是,此$
版本试图读取d3
(接收到this.d3
的函数参数称为this
或缩小版本中的global
),但是t
在模块上下文中是未定义的(脚本在this
运行时在脚本上下文中运行)。
在使用任何生成此import
的构建工具中,这仅仅是一个错误。它应该使用d3
(或者也许使用self
)。
this || self
曾有此错误,但不久前已修复。
无论如何,即使固定了rollup
之后,您在d3
中也将一无所获,它将.then()
设置为全局值。 (除非他们发布了ES模块版本。)