Ich versuche, die Webpack-Produktionskonfiguration einzurichten. Alles sieht gut aus. Allerdings habe ich festgestellt, dass bei der Verwendung des Commons Chunk-Plugins alle Dateien wie erwartet gemeinsam behandelt werden. Was ich tun möchte, ist die Trennung von allgemeinen Bibliotheksmodulen und gemeinsamen Anwendungsmodulen. Meine Konfigurationsdatei ist:Webpack schließt Einträge für CommonsChunkPlugin aus
module.exports = {
entry: {
lib: ["react", "react-dom"],
app: "./ui-v2/app/app.js",
app2: "./ui-v2/app/app2.js"
},
output: {
path: path.join(__dirname, "target/ui/v2"),
filename: "/app/[name].[chunkhash].min.js"
},
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader"
},
{
test: /\.(png|jpg|svg)/,
loader: "file-loader?name=img/[name].[hash].[ext]"
// loaders: ["url", "image-webpack"]
},
{
test: /\.scss$/,
loader: ExtractTextPlugin.extract("style-loader", "css-loader!autoprefixer-loader!sass-loader", {
publicPath: __dirname
})
},
{
test: /\.(woff|woff2|ttf|eot)$/,
loader: "file-loader?name=fonts/[name].[hash].[ext]"
}
]
},
plugins: [
clean,
new webpack.optimize.CommonsChunkPlugin("common", "app/common.[chunkhash].js"),
new webpack.ProvidePlugin({
React: "react",
ReactDOM: "react-dom",
$: "jquery",
_: "lodash"
}),
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
sourceMap: true
},
mangle: {
except: ["exports", "import", "$", "_", "require", "React", "ReactDOM"]
}
}),
new ExtractTextPlugin("styles/[name].[contenthash].css"),
new Manifest()
]
}
Grundsätzlich habe ich 3 Module in der App; app.js, app2.js und eine gemeinsame Komponente user.js.
Was ich erreichen möchte ist, alle Bibliothek bezogenen Dateien wie react, react-dom, lodash, etc. in einem lib-Bundle und gemeinsame Anwendungskomponenten wie user.js in einem gemeinsamen Bundle zu bündeln. Um dies zu tun, dachte ich, es könnte eine Option geben, die Dateien auszuschließen, die nicht in eine "normale" Datei gehen sollen. Wenn ich diesen Ausgang verwenden, was ist der Punkt für die Langzeit Caching-Dateien für die Bibliotheksbündel, weil, wenn ich eine gemeinsame Komponente in meinem Projekt zu bekommen, werden sie in das gemeinsame Bündel gehen und der Inhalt Hash wird anders sein, aber es ändert sich nichts in dieser Bibliothek Dateien wie reagieren, jquery, lodash usw.
wie auch immer, was ich am Ende des Build-Prozess haben, ist alles, was geht noch in die gemeinsame Bündel und lib hat nichts und die Dateigrößen sind:
app.<hash>.min.js -> 3.05KB
app2.<hash>.min.js -> 3.05KB
lib.<hash>.min.js -> 165 Bytes (has almost nothing!)
common.<hash>.js -> 678 KB
Gibt es einen Weg, um zu erreichen, was ich will oder was wäre der beste Ansatz für eine Produktion in ähnlichen Fällen? Vielen Dank!
yepp, das ist richtig, aber ich erwarte, dass es 4 Bündel, um zu sehen, die app.js sind als Selbstkomponentencode enthalten ist, wird app2.js auch sef Komponentencode enthalten ist, lib.js „die nur die Bibliotheken hat wie“ reagieren, lodash ", und das vierte ist das" Commons in der Anwendung ", das ist von mir erstellte Benutzerkomponente, keine Bibliothek.Wie im Titel der Frage, was ich erreichen möchte, ist es, zwei Commons zu erstellen, 1. ist nur die dritte Partei, und die zweite ist meine eigene Unterbibliotheken und ich möchte nicht Bibliotheken und gemeinsame App-Komponenten in der gleichen bündeln. Danke für die Antwort, aber ich bin mir dessen bewusst – erdysson
Also was Sie wollen, ist dies -> app.js, app2.js, coomon.js und lib.js. Und im Allgemeinen, js, möchtest du deinen eigenen Code setzen, der in app & app2 üblich ist? Bitte bestätigen. – hazardous
Ja, Sie sind korrekt – erdysson