crt-fe/build/webpack.prod.conf.js

93 lines
2.9 KiB
JavaScript
Raw Normal View History

2016-10-26 14:46:32 +00:00
var path = require('path')
var config = require('../config')
var utils = require('./utils')
var webpack = require('webpack')
var merge = require('webpack-merge')
var baseWebpackConfig = require('./webpack.base.conf')
var MiniCssExtractPlugin = require('mini-css-extract-plugin')
2016-10-26 14:46:32 +00:00
var HtmlWebpackPlugin = require('html-webpack-plugin')
var env = process.env.NODE_ENV === 'testing'
? require('../config/test.env')
: config.build.env
let commitHash = require('child_process')
.execSync('git rev-parse --short HEAD')
.toString();
2016-10-26 14:46:32 +00:00
var webpackConfig = merge(baseWebpackConfig, {
2019-05-13 18:54:25 +00:00
mode: 'production',
2016-10-26 14:46:32 +00:00
module: {
rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, extract: true })
2016-10-26 14:46:32 +00:00
},
devtool: config.build.productionSourceMap ? '#source-map' : false,
optimization: {
2019-05-13 18:54:25 +00:00
minimize: true,
splitChunks: {
chunks: 'all'
}
},
2016-10-26 14:46:32 +00:00
output: {
path: config.build.assetsRoot,
filename: utils.assetsPath('js/[name].[chunkhash].js'),
2019-05-13 18:54:25 +00:00
chunkFilename: utils.assetsPath('js/[name].[chunkhash].js')
2016-10-26 14:46:32 +00:00
},
plugins: [
// http://vuejs.github.io/vue-loader/workflow/production.html
new webpack.DefinePlugin({
'process.env': env,
2018-12-11 15:57:24 +00:00
'COMMIT_HASH': JSON.stringify(commitHash),
2018-12-11 15:54:17 +00:00
'DEV_OVERRIDES': JSON.stringify(undefined)
2016-10-26 14:46:32 +00:00
}),
// extract css into its own file
new MiniCssExtractPlugin({
filename: utils.assetsPath('css/[name].[contenthash].css')
}),
2016-10-26 14:46:32 +00:00
// generate dist index.html with correct asset hash for caching.
// you can customize output by editing /index.html
// see https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: process.env.NODE_ENV === 'testing'
? 'index.html'
: config.build.index,
template: 'index.html',
inject: true,
minify: {
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true,
ignoreCustomComments: [/server-generated-meta/]
2016-10-26 14:46:32 +00:00
// more options:
// https://github.com/kangax/html-minifier#options-quick-reference
},
// necessary to consistently work with multiple chunks via CommonsChunkPlugin
chunksSortMode: 'dependency'
}),
// split vendor js into its own file
// extract webpack runtime and module manifest to its own file in order to
// prevent vendor hash from being updated whenever app bundle is updated
// new webpack.optimize.SplitChunksPlugin({
// name: ['app', 'vendor']
// }),
2016-10-26 14:46:32 +00:00
]
})
if (config.build.productionGzip) {
var CompressionWebpackPlugin = require('compression-webpack-plugin')
webpackConfig.plugins.push(
new CompressionWebpackPlugin({
asset: '[path].gz[query]',
algorithm: 'gzip',
test: new RegExp(
'\\.(' +
config.build.productionGzipExtensions.join('|') +
')$'
),
threshold: 10240,
minRatio: 0.8
})
)
}
module.exports = webpackConfig