2017-11-23 3 views
1

Ich versuche, CesiumJS mit Rollup zu bündeln. Ich dachte, ich könnte einfach einen Import wie folgt machen:Bündelung CesiumJS mit RollupJS

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

mit der folgenden rollup.config.js Datei. Ich erhalte eine bundle.js aber wenn ich es laufen bekomme ich viele Fehler:

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

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) 
    ] 
} 

Antwort

0

ES-Module immer im Strict-Modus sind - durch Erweiterung, wenn etwas in Rollup importiert und in ein ES-Modul konvertiert wird, wird auch im strikten Modus ausgeführt.

Im strikten Modus der Wert von this innerhalb einer Funktion ist undefined, es sei denn, es als ein Verfahren bezeichnet a) ist, oder b) explizit mit call oder apply.

Dieses Verhalten ist mit Rollup erwartet, und es ist nicht technisch einen Fehler mit Cäsium, aber ich würde ein Problem mit ihnen vorschlagen erhöhen und zu sehen, wenn sie eine modernere Art und Weise der Zugriff auf die globale Variable verwenden können. Es gibt wirklich keinen Grund, sich 2017 auf nicht-striktes Verhalten zu verlassen!

Als letzten Ausweg können Sie this || eval("this") (oder this||(0,eval)("this"), wie es in der verkleinerten Version ist) mit window ersetzen.

Wenn nach dieser Änderung viele andere Fehler auftreten, ist es möglicherweise nicht möglich, Cäsium in Ihr Paket aufzunehmen, und Sie müssen es als externes Modul aufbewahren.