多入口: 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 的区别?