VUE-CLI3 创建多页面项目打包配置问题,和splitChunks 该如何优化

来源:6-1 如何编写一个 Loader(1)

Che_

2019-06-23

这里是我vue.config.js配置

const path = require('path')
const glob = require('glob')
const PAGES_PATH = path.resolve(__dirname, './src/pages')
const pages = {}

//配置 pages 目录下的多页面,通过循环获取每一个 page 文件夹下的 html 和 js
glob.sync(PAGES_PATH + '/*/main.js').forEach(filePath => {
  const pageName = path.basename(path.dirname(filePath))
  pages[pageName] = {
    entry: filePath,
    template: path.dirname(filePath) + '/index.html',
    filename: `${pageName}.html`,
    chunks: ['chunk-vendors', 'chunk-common', pageName, `manifest.${pageName}`]
  }
})
module.exports = {
  publicPath: process.env.NODE_ENV === 'production' ? './' : '/',
  pages: pages,
  assetsDir: 'assets',
  lintOnSave: false,
  productionSourceMap: false,
  css: {
    modules: false,
    extract: true,
    sourceMap: false
  },
  parallel: require('os').cpus().length > 1,

  chainWebpack: config => {
    config.module
      .rule('stylus')
      .test(/.styl/)
      .oneOf('vue')
      .resourceQuery(/?vue/)
      .use('px2rem')
      .loader('px2rem-loader')
      .before('postcss-loader')
      .options({
        remUnit: 37.5,
        remPrecision: 8
      }).end()
    config.module
      .rule('images')
      .use('url-loader')
      .loader('url-loader')
      .tap(options => Object.assign(options, { limit: 1024 }))
    config.optimization.splitChunks({
      chunks: 'all',// async表示抽取异步模块,all表示对所有模块生效,initial表示对同步模块生效
      cacheGroups: {
        vendors: {
          test: /[\/]node_modules[\/]/,// 指定是node_modules下的第三方包
          name: 'chunk-vendors',
          chunks: 'all',
          priority: -10   // 抽取优先级
        },
        // 抽离自定义工具库
        utilCommon: {
          name: 'chunk-common',
          minSize: 1024, // 将引用模块分离成新代码文件的最小体积
          minChunks: 2, // 表示将引用模块如不同文件引用了多少次,才能分离生成新chunk
          priority: -20
        }
      }
    })
    config.optimization.runtimeChunk({
      name: entryPoint => `manifest.${entryPoint.name}`
    })
    // 移除 preload
    glob.sync(PAGES_PATH + '/*/main.js').forEach(filePath => {
      const pageName = path.basename(path.dirname(filePath))
      config.plugins.delete(`preload-${pageName}`)
      config.plugins.delete(`prefetch-${pageName}`)
    })
  },
  configureWebpack: {},
  devServer: {}
}

这里是项目结构

当前配置打包遇到的问题

cacheGroups 中的 utilCommon 组中minSize 设置为 0 打包之后不报错不能正常显示页面,打包出来了奇怪的东西
图片描述

分离node_modules 中的第三方库

配置 如下

 vendor: {
          test: /[\/]node_modules[\/](vue|vant)[\/]/,
          name: 'chunk-vendors',
          chunks: 'all',
          priority: -10   // 抽取优先级
        }

结果并没有分离出 vue 和 第三方库 vant

已上遇到的问题久久不能解决 ,恳请老师指导

写回答

2回答

小小军

2021-01-22

optimization: {
  splitChunks: {
    cacheGroups: {
      'element-ui': {
        test: /[\\/]node_modules[\\/](element-ui|axios)/,
        chunks: 'all',
        priority: -5, // 抽取优先级
      },
    },
  },
},

这样分离没问题哦


1
0

Dell

2019-06-27

同学你好,这个涉及到你的业务了,和课程不是特别相关,我建议你再研究下,如果每个同学都问业务上的问题,我就吃不消了。实在不行加我微信dell-js,我抽空帮你看看

0
0

从基础到实战 手把手带你掌握新版Webpack4.0

知识点+项目实例+原理讲解 全方位解析Webpack4新版本

3627 学习 · 1291 问题

查看课程