/* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ const {merge} = require('webpack-merge'); const configCommon = require('./webpack.config.common'); const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const HtmlWebpackInlineSourcePlugin = require('html-webpack-inline-source-plugin'); const configProd = { mode: 'production', entry: { polyfills: './src/polyfills.ts', styles: ['./src/material-theme.scss', './src/styles.css'], app: './src/main_prod.ts', }, output: { path: path.resolve(__dirname, 'dist/prod'), publicPath: '/', filename: 'js/[name].[hash].js', chunkFilename: 'js/[name].[id].[hash].chunk.js', }, optimization: { runtimeChunk: 'single', splitChunks: { chunks: 'all', maxInitialRequests: Infinity, minSize: 0, cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, name(module) { const packageName = module.context.match( /[\\/]node_modules[\\/](.*?)([\\/]|$)/, )[1]; return `npm.${packageName.replace('@', '')}`; }, }, styles: { test: /\.css$/, name: 'styles', chunks: 'all', enforce: true, }, }, }, }, plugins: [ new HtmlWebpackPlugin({ template: 'src/index.html', inject: 'body', inlineSource: '.(css|js)$', }), new HtmlWebpackInlineSourcePlugin(HtmlWebpackPlugin), ], }; module.exports = merge(configCommon, configProd);