Я пытаюсь настроить конфигурацию производства webpack. Все выглядит хорошо. Однако я понял, что, используя плагин chons commons, он охватывает все файлы, как обычно. Что я хочу сделать, это разделение общих библиотечных модулей и общих модулей приложений. Мой конфигурационный файл:
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.
То, что я хочу достичь, - это связать все связанные с библиотекой файлы, такие как реакция, реагирование, lodash и т.д. в наборе lib, и общие компоненты приложения, такие как user.js, в общем комплекте. Чтобы сделать это, я подумал, что есть возможность исключить файлы, которые я не хочу, чтобы они попадали в "общий" файл. Если я использую этот вывод, какова точка для долгосрочных файлов кеширования для библиотечных пакетов, потому что всякий раз, когда я получаю общий компонент в моем проекте, они войдут в общий пакет, а хэш содержимого будет другим, но в этой библиотеке ничего не меняется файлы, такие как реакция, 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
Есть ли способ достичь того, что я хочу или что будет лучшим подходом к созданию производства в подобных случаях? Спасибо!