webpack.config.js
const path = require('path');
const webpack = require('webpack');
const {CleanWebpackPlugin} = require('clean-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
entry: './src/index.js',
output: {filename: '[name].[contenthash].js',
path: path.resolve(__dirname, 'dist')
},
//use inline-source-map for development
devtool: 'inline-sorce-map',
//use source-map for production
//devtool: 'source-map',
devServer: {contentBase: './dist'},
module:{
rules: [
{
test: /\.js$/,
loader: 'babel-loader',
include: [path.resolve(__dirname, 'src')],
exclude: [path.resolve(__dirname, 'node_modules')]
}
]
},
plugins:[new CleanWebpackPlugin(),
new BundleAnalyzerPlugin({
openAnalyzer: false,
analyzerMode: 'static',
reportFilename: 'bundle-analyzer-report.html'
}),
new HtmlWebpackPlugin({
template: './src/index.html',
filename: 'index.html'
}),
new webpack.HashedModuleIdsPlugin()],
optimization: {
runtimeChunk: {"name": "manifest"},
splitChunks: {
chunks: 'all',
cacheGroups: {
common: {
minChunks: 2,
name: 'commons',
chunks: 'async',
priority: 10,
reuseExistingChunk: true,
enforce: true
}
}
}
}
}
.babelrc 配置
{
"presets": [
[
"@babel/preset-env",
{"modules": false}
]
],
"plugins": ["@babel/plugin-syntax-dynamic-import"]
}