ervu-lkrp-ul/frontend/webpack.aot.config.js

144 lines
3.9 KiB
JavaScript

'use strict';
const path = require('path');
const webpack = require('webpack');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const TerserPlugin = require('terser-webpack-plugin');
function _path(p) {
return path.join(__dirname, p);
}
module.exports = {
mode: 'production',
entry: {
polyfills: './build/scripts/polyfills.js',
vendor: './build/scripts/vendor.js',
main: './build/scripts/main.aot.js',
},
context: process.cwd(),
output: {
path: path.join(process.cwd(), './dist'),
filename: '[name].[chunkhash].bundle.js',
chunkFilename: '[id].[chunkhash].chunk.js',
assetModuleFilename: 'src/resources/[base]',
publicPath: 'auto'
},
module: {
rules: [
{
test: /\.js$/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
},
{
test: /\.js$/,
use: {
loader: 'angular-router-loader?aot=true'
}
},
{
test: /\.html$/,
use: {
loader: 'raw-loader'
}
},
{
test: /\.css$/,
use: [
{
loader: MiniCssExtractPlugin.loader,
options: {
// you can specify a publicPath here
// by default it use publicPath in webpackOptions.output
// publicPath: '../'
}
},
{
loader: 'css-loader'
}
]
},
{
test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico|otf)$/,
type: 'asset/resource'
}
]
},
optimization: {
minimizer: [
new TerserPlugin({
parallel: true,
terserOptions: {
// https://github.com/webpack-contrib/terser-webpack-plugin#terseroptions
}
})
],
splitChunks: {
// include all types of chunks
chunks: 'all'
}
},
plugins: [
new HtmlWebpackPlugin({
template: 'index.webpack.html',
filename: 'index.html',
chunksSortMode : 'none'
}),
new CopyWebpackPlugin([
{from: 'index.webpack.html', to: 'index.html'},
{from: 'src/resources/img/progress.gif', to: 'src/resources/img/progress.gif'},
{from: 'src/resources/img/logo.png', to: 'src/resources/img/logo.png'},
{from: 'src/resources/app-config.json', to: 'src/resources/app-config.json'},
{from: 'src/resources/app.version', to: 'src/resources/app.version'},
{from: 'doc', to: 'doc'},
{from: 'src/resources/landing', to: 'src/resources/landing'}
]),
new MiniCssExtractPlugin({
filename: '[name].[fullhash].css',
chunkFilename: '[id].[fullhash].css'
}),
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
"window.jQuery": "jquery",
Popper: ['popper.js', 'default']
})
],
resolve: {
alias: {
'jquery': _path('node_modules/jquery/dist/jquery.min'),
'inputmask': _path('node_modules/inputmask/dist/inputmask'),
'downloadjs': _path('node_modules/downloadjs/download.min.js'),
'esmarttokenjs': _path('node_modules/esmarttokenjs/esmarttoken.js'),
'cadesplugin_api': _path('node_modules/cadesplugin_api/index.js'),
'eonasdan-bootstrap-datetimepicker': _path('node_modules/eonasdan-bootstrap-datetimepicker/src/js/bootstrap-datetimepicker'),
'autonumeric': _path('node_modules/autonumeric/dist/autoNumeric.js'),
'jsgantt-improved': _path('node_modules/jsgantt-improved/dist/jsgantt.js'),
'js-year-calendar': _path('node_modules/js-year-calendar/dist/js-year-calendar.js'),
'chart.js': _path('node_modules/chart.js/dist/chart.js')
},
modules: [
'node_modules',
path.resolve(process.cwd(), './build'),
path.resolve(process.cwd(), './build/scripts'),
],
extensions: ['.js']
},
stats: {
children: false
},
devtool: false
};