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