使用RollupJS捆绑CesiumJS

时间:2017-11-23 22:18:28

标签: cesium rollupjs

我正在尝试将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)
    ]
}

1 个答案:

答案 0 :(得分:0)

ES模块始终处于严格模式 - 通过扩展,当某些内容导入Rollup并转换为ES模块时, 也会以严格模式运行。

在严格模式下,函数内this的值为undefined,除非它是a)被称为方法,或b)明确设置为call或{{1} }。

这是Rollup的预期行为,并且技术上不是Cesium的错误,但我建议他们提出一个问题,看看他们是否可以使用更现代的方式访问全局变量。 2017年真的没有理由依赖非严格的行为!

作为最后的手段,您可以使用apply字符串替换this || eval("this")(或this||(0,eval)("this"),因为它在缩小版中)。

如果在进行更改后存在许多其他错误,则可能无法在捆绑包中包含Cesium,并且您需要将其保留为外部模块。