我正在尝试将CesiumJS与Rollup捆绑在一起。我以为我可以像这样导入:
import Cesium from 'cesium/Build/Cesium/Cesium.js'
使用以下rollup.config.js文件。我得到了一个bundle.js,但是当我运行它时,我遇到了很多错误:
未捕获的TypeError:无法读取未定义的属性“文档” 在bundle.js:格式化:102314
function() {
!function(e) {
var t = this || eval("this")
, r = t.document // it is complaining on this line
, i = t.navigator
, n = t.jQuery
, o = t.JSON;
rollup.config.js
import resolve from 'rollup-plugin-node-resolve'
import commonjs from 'rollup-plugin-commonjs'
import uglify from 'rollup-plugin-uglify'
import { minify } from 'uglify-es'
export default {
input: 'scripts/Main.js',
output: {
file: 'dist/bundle.js',
format: 'es',
},
"options": {
sourceMap: 'inline',
output: {
format: 'es'
}
},
plugins: [
resolve({
jsnext: true,
main: true,
browser: true,
}),
commonjs(),
uglify({}, minify)
]
}
答案 0 :(得分:0)
ES模块始终处于严格模式 - 通过扩展,当某些内容导入Rollup并转换为ES模块时, 也会以严格模式运行。
在严格模式下,函数内this
的值为undefined
,除非它是a)被称为方法,或b)明确设置为call
或{{1} }。
这是Rollup的预期行为,并且技术上不是Cesium的错误,但我建议他们提出一个问题,看看他们是否可以使用更现代的方式访问全局变量。 2017年真的没有理由依赖非严格的行为!
作为最后的手段,您可以使用apply
字符串替换this || eval("this")
(或this||(0,eval)("this")
,因为它在缩小版中)。
如果在进行更改后存在许多其他错误,则可能无法在捆绑包中包含Cesium,并且您需要将其保留为外部模块。