Ich verwende webpack in meinen bestehenden Knockout Basis SPA Rahmen, um faul Lastmodelle unter Berücksichtigung, da der Benutzer durch die Website navigiertwebpack Asynchron-Module mit dem Versprechen
ich unter dem unten genannten Faden hatte einen Blick Create individual SPA bundles with Webpack
und die akzeptierte Antwort schien sehr ähnlich zu dem, was ich versuche zu erreichen. Grundsätzlich besteht jede SPA-Seite aus einer Sammlung von Komponenten, die im JSON-Format vom Server zurückgegeben werden.
Der Client ordnet diese Komponenten einzelnen js-Modellen zu. Im Moment sind diese js-Modelle alle in einer großen Datei gebündelt und werden dem Client zum ersten Mal bereitgestellt, wenn die Site gerendert wird.
Ich möchte diese Komponenten (über require und require.ensure) in Stücke zerlegen, die bei Bedarf mit Hilfe von Webpack geladen werden.
Also fiedelte ich mit der vorgeschlagenen Lösung aus dem oben genannten Thread und es hat gut funktioniert. I auch eine Wurzel Richtlinie
var webpack = require('webpack'),
path = require('path');
var commonsPlugin =
new webpack.optimize.CommonsChunkPlugin('common.js');
module.exports = {
devtool1: 'eval-source-map',
entry: {
app: './app'
},
output: {
path: __dirname + "/build",
filename: '[name]-bundle.js',
publicPath: "/code_split/build/"
},
watchOptions: {
poll: 2000
},
resolve: {
root: [
path.resolve('./models/components')
],
extensions: ['', '.js']
},
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel',
query: {
presets: ['es2015']
}
}
]
},
plugins: [commonsPlugin]
}
webpack.config.js hinzugefügt, so dass I-Module ohne Angabe relative Pfade erfordern kann (jedes Modell ist in einem Modul innerhalb js Modelle/Komponenten-Verzeichnis)
Nun ist die Problem, das ich in laufen, ist, dass ich versucht, alle zu extrahieren das erfordert von der Switch-Anweisung auf eine Funktion, die ein Versprechen gibt, die
schön mit meinem vorhandenen Implementierung funktioniert so statt
habe ich es zu
function loadModule(mo){
return new Promise(function(resolve){
require([mo], function(module){
resolve(module.default);
});
});
}
switch(mod) {
case "contacts":
promise = loadModule("contacts");
break;
case "tasks":
promise = loadModule("tasks");
break;
}
Nach webpack jedoch ausgeführt wird, schlägt die oben kläglich. Es scheint in eine Endlosschleife zu gehen, da es am Ende eine alarmierend hohe Anzahl von zu verarbeitenden Modulen findet und viele Ausnahmen ausspuckt Ich bin ziemlich sicher, dass dies von der loadModule-Funktion verursacht wird, da wenn ich es direkt versuche, es erfordert funktioniert gut
Irgendwelche Ideen? Dank
Danke für die Hilfe. Also im Grunde brauche ich die Promise in jedem Fall Aussage richtig? Ich bin neugierig, ob es eine andere Möglichkeit gibt, das gleiche zu erreichen, da die Art und Weise, wie ich es sehe, es etwas einschränkt und die Duplizierung fördert – Thomas
Momentan gibt es das nicht. Es fördert die Duplizierung nicht genau, es erlaubt keine Deduplizierung. Webpack benötigt wirklich statische Analyse, um gut zu funktionieren, also gibt es einfach keine Möglichkeit. – Ambroos