'use strict'
const path = require('path')
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
var GenerateAssetPlugin = require('generate-asset-webpack-plugin');
var createServerConfig = function(compilation) {
let configJson = {
prod: {
baseUrl: "http://cloud.vincenthsing.top:8080/cloud/api",
ssoUrl: 'http://cloud.vincenthsing.top:8080/cloud/api/dataintegration-common-sso-provider',
systemUrl: 'http://cloud.vincenthsing.top:8080/cloud/api/dataintegration-portal-system-management-provider',
groupUrl: 'http://cloud.vincenthsing.top:8080/cloud/api/dataintegration-group-provider',
projectUrl: 'http://cloud.vincenthsing.top:8080/cloud/api/dataintegration-project-provider',
runManagerUrl: 'http://cloud.vincenthsing.top:8080/cloud/api/dataintegration-run-provider',
modelMangerUrl: 'http://cloud.vincenthsing.top:8080/cloud/api/dataintegration-model-provider',
wsUrl: 'ws://prime.shuzhaninfo.com:8088/cloud/ws/dataintegration-di-run-management-provider',
onLineUrl: 'http://cloud.vincenthsing.top:8080/cloud/api/dp-schedule-online-audit-provider',
fileUrl: 'http://cloud.vincenthsing.top:8080/cloud/api/dp-file-management-provider',
},
test: {
baseUrl: "http://127.0.0.1:10200/api",
ssoUrl: 'http://10.242.10.173:10200/api/dataintegration-common-sso-provider',
systemUrl: 'http://10.242.10.173:10200/api/dataintegration-portal-system-management-provider',
groupUrl: 'http://10.242.10.173:10200/api/dataintegration-group-provider',
projectUrl: 'http://10.242.10.173:10200/api/dataintegration-project-provider',
runManagerUrl: 'http://10.242.10.173:10200/api/dataintegration-di-run-management-provider',
modelMangerUrl: 'http://10.242.10.173:10200/api/dataintegration-model-provider',
wsUrl: 'ws://127.0.0.1:10200/ws/dataintegration-di-run-management-provider',
onLineUrl: 'http://10.242.10.173:10200/api/dp-schedule-online-audit-provider',
fileUrl: 'http://10.242.10.173:10200/api/dp-file-management-provider',
},
uat: {
baseUrl: "http://prime.shuzhaninfo.com:8088/cloud-uat/api",
ssoUrl: 'http://10.242.10.173:10200/api/dataintegration-common-sso-provider',
systemUrl: 'http://10.242.10.173:10200/api/dataintegration-portal-system-management-provider',
groupUrl: 'http://10.242.10.173:10200/api/dataintegration-group-provider',
projectUrl: 'http://10.242.10.173:10200/api/dataintegration-project-provider',
runManagerUrl: 'http://10.242.10.173:10200/api/dataintegration-run-provider',
modelMangerUrl: 'http://10.242.10.173:10200/api/dataintegration-model-provider',
wsUrl: 'ws://prime.shuzhaninfo.com:8088/cloud-uat/ws/dataintegration-di-run-management-provider',
onLineUrl: 'http://10.242.10.173:10200/api/dp-schedule-online-audit-provider',
fileUrl: 'http://10.242.10.173:10200/api/dp-file-management-provider',
}
};
return JSON.stringify(configJson);
}
const env = require('../config/' + process.env.env_config + '.env')
const webpackConfig = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({
sourceMap: config.build.productionSourceMap,
extract: true,
usePostCSS: true
})
},
devtool: config.build.productionSourceMap ? config.build.devtool : false,
output: {
path: config.build.assetsRoot,
filename: utils.assetsPath('js/[name].[chunkhash].js'),
chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
},
plugins: [
new webpack.DefinePlugin({
'process.env': env,
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
'process.env.env_config': JSON.stringify(process.env.env_config)
}),
new UglifyJsPlugin({
uglifyOptions: {
compress: {
warnings: false
}
},
sourceMap: config.build.productionSourceMap,
parallel: true
}),
new ExtractTextPlugin({
filename: utils.assetsPath('css/[name].[contenthash].css'),
allChunks: true,
}),
new OptimizeCSSPlugin({
cssProcessorOptions: config.build.productionSourceMap ? {
safe: true,
map: {
inline: false
}
} : {
safe: true
}
}),
new HtmlWebpackPlugin({
filename: config.build.index,
template: 'index.html',
inject: true,
minify: {
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true
},
chunksSortMode: 'dependency'
}),
new webpack.HashedModuleIdsPlugin(),
new webpack.optimize.ModuleConcatenationPlugin(),
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
minChunks(module) {
return (
module.resource &&
/\.js$/.test(module.resource) &&
module.resource.indexOf(
path.join(__dirname, '../node_modules')
) === 0
)
}
}),
new webpack.optimize.CommonsChunkPlugin({
name: 'manifest',
minChunks: Infinity
}),
new webpack.optimize.CommonsChunkPlugin({
name: 'app',
async: 'vendor-async',
children: true,
minChunks: 3
}),
new CopyWebpackPlugin([{
from: path.resolve(__dirname, '../static'),
to: config.build.assetsSubDirectory,
ignore: ['.*']
}])
]
})
if (config.build.productionGzip) {
const 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
})
)
}
if (config.build.bundleAnalyzerReport) {
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
webpackConfig.plugins.push(new BundleAnalyzerPlugin())
}
webpackConfig.plugins.push(
new GenerateAssetPlugin({
filename: 'config.json',
fn: (compilation, cb) => {
cb(null, createServerConfig(compilation));
},
extraFiles: []
})
)
module.exports = webpackConfig