我正在嘗試設置webpack生產配置。一切看起來不錯。但是,我意識到,在使用公用塊插件時,它會按預期涵蓋所有共同文件。我想要做的是分離公共庫模塊和通用應用程序模塊。我的配置文件是:Webpack排除CommonsChunkPlugin的條目
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()
]
}
基本上我有3個模塊在應用程序; app.js,app2.js和一個通用組件user.js。
我想達到什麼是捆綁所有的庫相關的文件等反應,反應-DOM,lodash等在一個lib包,並像在公共束user.js的常見應用程序組件。爲了做到這一點,我想可能會有一個選項來排除我不希望它們轉到「常用」文件的文件。如果我使用這個輸出,庫bundle的長期緩存文件有什麼意義,因爲每當我在我的項目中獲得一個公共組件時,它們將進入公共包,並且內容哈希將會不同,但是這個庫中沒有任何變化等反應,jQuery的,lodash等
不管怎麼說,我在構建過程的最後文件,是一切還進入公共束和lib無關,文件大小爲:
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
有沒有什麼辦法可以實現我想要的或者在類似情況下生產構建的最佳方法?謝謝!
YEPP,這是正確的,但是,我希望看到4捆在那裏,這是自我包含的組件代碼app.js,app2.js也海基會包含組件代碼,lib.js「這隻有像庫」反應,lodash「,第四個是」應用程序中的公共「,即由我創建的用戶組件,而不是庫。就像問題的標題一樣,我想要實現的是創建兩個commons,第一個只是第三方,第二個是我自己的子庫,我不希望庫和常見應用程序組件相同束。謝謝你的回答,但我知道它 – erdysson
所以你想要的是 - > app.js,app2.js,coomon.js和lib.js.在通常情況下,js,你想把所有你自己的代碼放在app&app2中通用?請確認。 – hazardous
是的,你是對的 – erdysson