diff --git a/static.webpack.config.prod.js b/static.webpack.config.prod.js index 09702a9..d2140ae 100644 --- a/static.webpack.config.prod.js +++ b/static.webpack.config.prod.js @@ -13,127 +13,171 @@ const TEMPLATE_FILE = path.resolve(APP_PATH, 'index.html'); const BUILD_PATH = path.resolve(ROOT_PATH, './static'); -const staticFiles = { - mode: 'production', - entry: { - app: ENTRY_FILE, - vendor: [ - "angular", - '@uirouter/angularjs' - ] - }, - output: { - path: BUILD_PATH, - filename: 'js/[name].[hash:8].js', - chunkFilename: 'js/[name].[chunkhash:8].js' - }, - module: { - rules: [ - { - test: /\.html$/, - use: { - loader: 'html-loader', - options: { - exportAsEs6Default: true, - minimize: true, - removeComments: true +const staticFiles = [ + { + mode: 'production', + entry: { + app: ENTRY_FILE, + vendor: [ + "angular", + '@uirouter/angularjs' + ] + }, + output: { + path: BUILD_PATH, + filename: 'js/[name].[hash:8].js', + chunkFilename: 'js/[name].[chunkhash:8].js' + }, + module: { + rules: [ + { + test: /\.html$/, + use: { + loader: 'html-loader', + options: { + exportAsEs6Default: true, + minimize: true, + removeComments: true + } + } + }, + { + test: /\.css$/, + exclude: NODE_MODULES_PATH, + use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader'], + include: APP_PATH + }, + { + test: /\.less$/, + use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader', 'less-loader'], + }, + { + test: /\.scss$/, + exclude: NODE_MODULES_PATH, + use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader', 'sass-loader'], + include: APP_PATH + }, + { + test: /\.(eot|woff|ttf|woff2)(\?|$)/, + exclude: NODE_MODULES_PATH, + use: { + loader: 'file-loader', + options: { + name: '[name].[ext]' + } + }, + include: APP_PATH + }, + { + test: /\.(png|jpg|gif|svg)$/, + exclude: NODE_MODULES_PATH, + use: { + loader: 'url-loader', + options: { + limit: 8192, + name: 'images/[name].[hash:8].[ext]' + } + }, + include: APP_PATH + }, + { + test: /\.ts$/, + exclude: NODE_MODULES_PATH, + use: 'ts-loader', + include: APP_PATH + } + ] + }, + plugins: [ + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify('production') + } + }), + new HtmlWebpackPlugin({ + filename: path.resolve(BUILD_PATH, 'index.html'), + template: TEMPLATE_FILE, + hash: false, + }), + new CleanWebpackPlugin(['./static'], { + root: path.resolve(__dirname, './'), + verbose: true + }), + new MiniCssExtractPlugin({ + filename: 'css/[name].css?v=[contenthash:8]' + }) + ], + optimization: { + splitChunks: { + cacheGroups: { + common: { + chunks: 'all', + minChunks: 2, + maxInitialRequests: 5, + minSize: 0, + name: 'common' + }, + vendor: { + test: /node_modules/, + chunks: 'all', + name: 'vendor', + priority: 10, + enforce: true, + minChunks: 2 } } - }, - { - test: /\.css$/, - exclude: NODE_MODULES_PATH, - use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader'], - include: APP_PATH - }, - { - test: /\.less$/, - use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader', 'less-loader'], - }, - { - test: /\.scss$/, - exclude: NODE_MODULES_PATH, - use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader', 'sass-loader'], - include: APP_PATH - }, - { - test: /\.(eot|woff|ttf|woff2)(\?|$)/, - exclude: NODE_MODULES_PATH, - use: { - loader: 'file-loader', - options: { - name: '[name].[ext]' - } - }, - include: APP_PATH - }, - { - test: /\.(png|jpg|gif|svg)$/, - exclude: NODE_MODULES_PATH, - use: { - loader: 'url-loader', - options: { - limit: 8192, - name: 'images/[name].[hash:8].[ext]' - } - }, - include: APP_PATH - }, - { - test: /\.ts$/, - exclude: NODE_MODULES_PATH, - use: 'ts-loader', - include: APP_PATH } - ] - }, - plugins: [ - new webpack.DefinePlugin({ - 'process.env': { - NODE_ENV: JSON.stringify('production') - } - }), - new HtmlWebpackPlugin({ - filename: path.resolve(BUILD_PATH, 'index.html'), - template: TEMPLATE_FILE, - hash: false, - }), - new CleanWebpackPlugin(['./static'], { - root: path.resolve(__dirname, './'), - verbose: true - }), - new MiniCssExtractPlugin({ - filename: 'css/[name].css?v=[contenthash:8]' - }) - ], - optimization: { - splitChunks: { - cacheGroups: { - common: { - chunks: 'all', - minChunks: 2, - maxInitialRequests: 5, - minSize: 0, - name: 'common' - }, - vendor: { - test: /node_modules/, - chunks: 'all', - name: 'vendor', - priority: 10, - enforce: true, - minChunks: 2 - } + }, + resolve: { + extensions: ['.js', '.ts', '.less', '.scss', '.css'], + alias: { + '@': APP_PATH, } } }, - resolve: { - extensions: ['.js', '.ts', '.less', '.scss', '.css'], - alias: { - '@': APP_PATH, + { + mode: 'production', + entry: path.resolve(__dirname, 'lib/FrontblockLib.js'), + output: { + path: path.resolve(__dirname, 'static'), + filename: 'FrontblockLib.js', + }, + module: { + rules: [ + { test: /\FrontblockLib.ts/, use: 'ts-loader' } + ] + }, + optimization: { + minimizer: [new TerserPlugin({ + cache: true, + parallel: true, + terserOptions:{ + mangle: false, + keep_classnames: true + } + })], + splitChunks: { + cacheGroups: { + common: { + chunks: 'all', + minChunks: 2, + maxInitialRequests: 5, + minSize: 0, + name: 'common' + }, + vendor: { + test: /node_modules/, + chunks: 'all', + name: 'vendor', + priority: 10, + enforce: true, + minChunks: 2 + } + } + } } } -}; +] const plugin = { target: "node", @@ -190,4 +234,4 @@ const plugin = { module.exports = [ Object.assign({}, staticFiles), Object.assign({}, plugin), -]; +]; \ No newline at end of file