Kann ich einen ES6 / 2015-Modulimport verwenden, um eine Referenz im 'globalen' Bereich festzulegen?

Habe ich diese situation, wo ich versuche zu importieren einer vorhandenen Bibliothek, die ich nenne troublesome (mit Webpack/Babel FWIW) und es hat einen globalen Verweis auf jQuery im es die ich bin versucht zu lösen mit Modul-syntax.

Habe ich erfolgreich importiert jquery in den "lokalen" Umfang eines Moduls über:

import jQuery from 'jquery'

also habe ich versucht:

import jQuery from 'jquery'    
import 'troublesome'

aber vielleicht nicht überraschend, bekomme ich so etwas wie jQuery is not a function trat zurück von troublesome.js

Habe ich versucht dies auch:

System.import('jquery')
.then(jQuery => {
    window.jQuery = jQuery
})
import 'troublesome'

aber, es stellt sich heraus, dass System.import ist Teil des, so genannten, 'module-loader' spec, gezogen aus dem es6/2015-Spezifikation, so dass es nicht zur Verfügung gestellt von Babel. Es ist ein poly-fillaber Webpack nicht in der Lage sein zu verwalten dynamischer Importe erfolgt über Aufrufe System.import sowieso.

aber... wenn ich rufe, aus dem die Skript-Dateien in index.html etwa so:

<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/troublesome/troublesome.js"></script>
<script src="the-rest-of-my-js.js"></script>

den Verweis auf jQuery aufgelöst troublesome.js und die Dinge sind gut,
aber ich würde es vorziehen, zu vermeiden, um die script-tag-route als webpack nicht zu verwalten.

Kann jemand empfehlen, eine anständige Strategie für den Umgang mit Szenarien wie diesem?

update

mit etwas Anleitung von @TN1ck, ich war schließlich in der Lage zu erkennen Webpack-centric-Lösung, mit der Importe-loader

Die Konfiguration dieser Lösung sieht wie folgt aus:

  //...
  module: {
    loaders: [
      //...
      {
        test: require.resolve('troublesome'),
        loader: "imports?jQuery=jquery,$=jquery"
      }
    ]
  }

InformationsquelleAutor der Frage tony_k | 2015-07-03

Schreibe einen Kommentar