2016-11-18 2 views
1

Meine Website hat zwei Arten von Seiten:Webpack: require.ensure und zusätzliche Anbieter Bündel

Seiten, auf denen Sie Javascript-Widgets der Hauptinhalt der Seite (TypeA) sind und wo Widgets einige zusätzliche Inhalte sind, könnte dieser Benutzer Auslöser (Typ B).

So würde Ich mag meine JS Code-Basis in drei Bündel aufgeteilt:

  • vendor.js - die auf allen Seiten
  • runtime.js enthalten ist - für Widgets
  • spezifische Einstiegspunkte für verschiedene Seiten

Für TypeA-Seiten ich habe dies:

<script src="vendor.js"></script> 
<script src="runtime.js"></script> 
<script src="pageA.js"></script> 
<!-- pageA.js launches the widget --> 

Aber für TypeB Ich möchte dies:

<script src="vendor.js"></script> 
<scriprt> 
    <!-- pseudo code --> 
    when('user clicks button', function() { 
    require.ensure('pageB.js', function(require) { 
     var pageBCode = require('pageB.js'); 
     <!-- do the magic --> 
     <!-- but I also need runtime.js here --> 
    }); 
    }); 
</script> 

Das Problem ist, dass ich runtime.js sowohl sync und async Seiten wiederverwendet werden soll. Aber ich kann nicht herausfinden, , wie runtime.js zusammen mit meinem On-Demand-Laden pageB.js laden. Ich muss es immer noch über <script src="runtime.js"></script> aufnehmen.

(ich benutze CommonChunksPlugin für die Erstellung von vendor.js und runtime.js, und es funktioniert gut auf TypeA Seiten)

+1

Warum kann man so etwas tun ' require.ensure (['pageB.js', 'runtime.js'], ....) ' – Thaadikkaaran

+0

Sie können [' bundle-loader'] (https://github.com/webpack/bundle-loader) verwenden um gebündelte Dateien zu laden – Thaadikkaaran

Antwort

0

Sie können ein Array an require.ensure als solche übergeben:

require.ensure(['pageB.js','runtime.js'], function(require){ 
    var pageBCode = require('pageB.js'), 
     runtimeCode = require('runtime.js'); 

    /** MAGIC! **/ 
}); 
+0

'runtime.js' ist kein Modul, sondern ein Bündel selbst. (Es ist aus vielen anderen Dateien) – dmzkrsk

+0

Ich fürchte, das ist nicht möglich, aber Sie sagen, dass es ein Bündel ist, nehme ich an, es wurde auch mit Webpack gebündelt, in diesem Fall können Sie ein Modul erstellen, das alles in Runtime benötigt .js' – jkris

+0

@jkris überprüfe meine Kommentare – Thaadikkaaran

Verwandte Themen