weixin_50802888 2022-04-13 16:44 采纳率: 63.3%
浏览 217
已结题

configureWebpack和chainWebpack的区别?

百度了一下,说简单的配置用configureWebpack,复杂的用chainWebpack,还是不能理解:
1.什么时候用configureWebpack,什么时候用chainWebpack?
2.为什么要用它,直接在vue.config.js里写不可以吗?vue.config不是集成了webpack吗
3.怎么用他们二者
以下是项目中的二者代码。实在看得云里雾里,请求解释。谢谢!


  configureWebpack: (config) => {
    config.output.library = `${packageName}`
    config.output.libraryTarget = 'umd'
    config.output.jsonpFunction = `webpackJsonp_${packageName}`
    config.externals = {
      // vue: 'Vue',
      axios: 'axios',
      vuex: 'Vuex'
      // 'element-ui': 'ELEMENT'
    }
    config.plugins.push(
      new webpack.ProvidePlugin({
        $: 'jquery',
        jQuery: 'jquery',
        'window.jQuery': 'jquery',
        Popper: ['popper.js', 'default']
      })
    )
    // console.log(process.env.NODE_ENV)
    if (process.env.NODE_ENV === 'production') {
      config.plugins.push(
        new CompressionPlugin({
          algorithm: 'gzip',
          test: /\.js$|\.css$|\.png$|\.jpg/, // 需要压缩的文件类型
          threshold: 1024, // 对超过1k的数据压缩
          deleteOriginalAssets: false // 不删除源文件
        // minRatio: 0.8 // 压缩比
        })
      )
      // 为生产环境修改配置...
      config.mode = 'production'
      config.optimization.minimizer = [
        new TerserPlugin({
          terserOptions: {
            compress: {
              warnings: false,
              drop_console: true, // console
              drop_debugger: true,
              pure_funcs: ['console.log'] // 移除console
            }
          }
        })
      ]
      // 打包文件大小配置
      config['performance'] = {
        maxEntrypointSize: 1000000000,
        maxAssetSize: 3000000000
      }
    } else {
      // 打包资源图形化显示
      // config.plugins.push(new BundleAnalyzer())
      // 为开发环境修改配置...
      config.mode = 'development'
    }
  },
  chainWebpack(config) {
    // set svg-sprite-loader
    config.module
      .rule('svg')
      .exclude.add(resolve('src/icons'))
      .end()
    config.module
      .rule('icons')
      .test(/\.svg$/)
      .include.add(resolve('src/icons'))
      .end()
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .options({
        symbolId: 'icon-[name]'
      })
      .end()
    config.module
      .rule('fonts')
      .test(/.(ttf|otf|eot|woff|woff2)$/)
      .use('url-loader')
      .loader('url-loader')
      .tap(options => {
        options = {
          // limit: 10000,
          name: '/static/fonts/[name].[ext]'
        }
        return options
      })
      .end()
    config.entry['whatwg-fetch']
  }
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 4月21日
    • 创建了问题 4月13日

    悬赏问题

    • ¥15 ue2.6.12版本用的若以,安装gojs,引入import * as go from 'gojs';报错
    • ¥15 服务器上的网站安装php5.6版本
    • ¥15 ModuleNotFoundError: No module named 'torch.utils._import_utils' 是缺少什么
    • ¥15 请大咖一起探索iptv 直播源的hls通过反向代理解密
    • ¥100 寻找技术员 云闪付tn转h5输入卡号付款的链接 重酬!
    • ¥100 科大讯飞语音唤醒词,unbuntu环境,报错
    • ¥50 python写segy数据时出错2
    • ¥20 关于R studio 做精确稳定检验的问题!(语言-r语言)
    • ¥50 用贝叶斯决策方法,设计CAD程序
    • ¥20 关于#目标检测#的问题:(qq收集表到时间才能填写,填写的份数有上限)