2017-11-23 4 views
1

CesiumJSをロールアップでバンドルしようとしています。ロールアップを使用してセシウムをバンドルする

import Cesium from 'cesium/Build/Cesium/Cesium.js' 

次のrollup.config.jsファイルでは、私はちょうどこのようなインポートを行うことができると思いました。私はbundle.jsを取得していますが、私はそれを実行したときに、私は多くのエラーを取得:

Uncaught TypeError: Cannot read property 'document' of undefined at bundle.js:formatted: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モジュールがstrictモードで常に

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

ES - によって拡張機能を使用すると、何かがロールアップにインポートされてESモジュールに変換されると、が厳密モードで実行されます。それはメソッドと呼ばれる)です、またはb)明示的call又はapplyで設定しない限り、厳密モードで

は、関数内部thisの値は、undefinedあります。

これはロールアップで予想される動作で、という技術的にはでセシウムのバグですが、問題を浮き彫りにして、グローバル変数にアクセスするためのより現代的な方法を使用できるかどうかを確認することをお勧めします。 2017年に非厳格な行動に頼るべき理由はまったくありません!

最後の手段としてthis || eval("this")(またはthis||(0,eval)("this")、これは縮小バージョンのため)をwindowで置き換えることができます。

変更後に他に多くのエラーがある場合は、バンドルにセシウムを含めることができない可能性があり、外部モジュールとして保管する必要があります。

関連する問題