多入口: entry、output、plugins中多个HtmlWebpackPluginentries = function() {var entryFiles = glob.sync(PAGE_PATH + "/*/*.js");var map = {};entryFiles.forEach(filePath => { var filename = filePath.substring(   filePath.lastIndexOf("/") + 1,   filePath.lastIndexOf(".") ); map[filename] = filePath;});return map;};entry: entries(),output: {path: config.build.assetsRoot,// filename: '[name].[contentHash:8].js',filename: utils.assetsPath('[name].[hash:7].js'),publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath},plugins: [].concat(htmlPlugins) // 同样借助glob.sync(PAGE_PATH + "/*/*.js");
2. 抽离压缩css文件。    仅在webpack.prod.jsplugins: [ new MiniCssExtractPlugin({ 抽离css文件 filename: 'css/main.[contentHash:8].css' })],optimization: { // 压缩css minimizer: [new TerserJSPlugin({}), new OptimizeCSSAssetsPlugin({})],}
3. 抽离公共代码和第三方代码。    webpack.prod.js
initial 入口 chunk,对于异步导入的文件不处理; async 异步 chunk,只对异步导入的文件处理;  all 全部 chunksplitChunks: {chunks: 'all',  // initial|async|allcacheGroups: { // 缓存分组 vendor: { // 第三方模块   name: 'vendor', // chunk 名称   priority: 1, // 权限更高,优先抽离,重要!!!   test: /node_modules/,   minSize: 0,  // 大小限制   minChunks: 1  // 最少复用过几次 }, common: { // 公共的模块   name: 'common', // chunk 名称   priority: 0, // 优先级   minSize: 0,  // 公共模块的大小限制   minChunks: 2  // 公共模块最少复用过几次 }}}
4. 懒加载。    如何实现异步加载JSsetTimeout(() => { import('./xx.js').then(res => {})}, 0)
5. 处理JSX。    .babelrc.js"presets": ["@babel/preset-react"]
6. 处理Vuetest: /\.vue$/,loader: ['vue-loader'],include: srcPath
module、chunk、bundle 的区别?