1
0
mirror of https://git.pleroma.social/sjw/pleroma-fe.git synced 2024-12-23 11:25:27 +01:00
pleroma-fe/build/webpack.prod.conf.js

105 lines
3.1 KiB
JavaScript
Raw Normal View History

2016-10-26 16:46:32 +02: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')
2022-08-16 01:14:21 +02:00
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin")
2016-10-26 16:46:32 +02:00
var HtmlWebpackPlugin = require('html-webpack-plugin')
var env = process.env.NODE_ENV === 'testing'
? require('../config/test.env')
: config.build.env
let commitHash = (() => {
2023-09-15 08:45:02 +02:00
const subst = "$Format:%h$";
if(!subst.match(/Format:/)) {
return subst;
} else {
return require('child_process')
.execSync('git rev-parse --short HEAD')
.toString();
}
})();
2016-10-26 16:46:32 +02:00
var webpackConfig = merge(baseWebpackConfig, {
2019-05-13 20:54:25 +02:00
mode: 'production',
2016-10-26 16:46:32 +02:00
module: {
rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, extract: true })
2016-10-26 16:46:32 +02:00
},
2022-08-16 00:01:33 +02:00
devtool: config.build.productionSourceMap ? 'source-map' : false,
optimization: {
2019-05-13 20:54:25 +02:00
minimize: true,
splitChunks: {
chunks: 'all'
2022-08-16 01:14:21 +02:00
},
minimizer: [
`...`,
new CssMinimizerPlugin()
]
},
2016-10-26 16:46:32 +02:00
output: {
path: config.build.assetsRoot,
filename: utils.assetsPath('js/[name].[chunkhash].js'),
2019-05-13 20:54:25 +02:00
chunkFilename: utils.assetsPath('js/[name].[chunkhash].js')
2016-10-26 16:46:32 +02:00
},
plugins: [
// http://vuejs.github.io/vue-loader/workflow/production.html
new webpack.DefinePlugin({
'process.env': env,
2018-12-11 16:57:24 +01:00
'COMMIT_HASH': JSON.stringify(commitHash),
2022-03-28 23:58:17 +02:00
'DEV_OVERRIDES': JSON.stringify(undefined),
'__VUE_OPTIONS_API__': true,
'__VUE_PROD_DEVTOOLS__': false
2016-10-26 16:46:32 +02:00
}),
// extract css into its own file
new MiniCssExtractPlugin({
filename: utils.assetsPath('css/[name].[contenthash].css')
}),
2016-10-26 16:46:32 +02: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 16:46:32 +02:00
// more options:
// https://github.com/kangax/html-minifier#options-quick-reference
2022-08-15 23:39:17 +02:00
}
2016-10-26 16:46:32 +02:00
}),
// 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 16:46:32 +02: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