首页 > 其他分享 >vue-cli/webpack4.x 打包--chainWebpack

vue-cli/webpack4.x 打包--chainWebpack

时间:2023-02-10 19:03:09浏览次数:61  
标签:vue cli -- svg loader test config name

 chainWebpack为一个方法,传入 config 进行配置

区分生产和开发环境

const IS_PROD = ['production', 'stage', 'preview'].includes(process.env.NODE_ENV)
const IS_DEV = ['development'].includes(process.env.NODE_ENV)

svg处理

参考  vue项目中svg图(svg标签)的使用方法

"svg-sprite-loader": "4.3.0" "vue-svg-loader": "0.16.0",
  const svgRule = config.module.rule('svg') // 找到svg-loader
    svgRule.uses.clear() // 清除已有的loader, 如果不这样做会添加在此loader之后
    svgRule.exclude.add(/node_modules/) // 正则匹配排除node_modules目录
    svgRule // 添加svg新的loader处理
      .test(/\.svg$/)
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .options({
        symbolId: 'icon-[name]'
      })
    // 修改images loader 添加svg处理
    const imagesRule = config.module.rule('images')
    imagesRule.exclude.add(resolve('src/icons'))
    config.module.rule('images').test(/\.(png|jpe?g|gif|svg)(\?.*)?$/)

为了补删除换行而加的配置

preserveWhitespace 是什么?

preserveWhitespace 是 compilerOptions对象中的属性之一。如果设置为false,标签之间的空白将会忽略,这可能会导致性能稍好,但可能会影响嵌入式元素的布局。true表示编译的渲染函数将会保留HTML标记之间的所有空白字符。

// set preserveWhitespace
    config.module
      .rule("vue")
      .use("vue-loader")
      .loader("vue-loader")
      .tap(options => {
        options.compilerOptions.preserveWhitespace = true;
        return options;
      })
      .end();

 生成源映射控制

//cheap-source-map--不显示源码 、source-map--显示源码 、 eval--最快的编译办法
config.when(IS_DEV, config => config.devtool('cheap-source-map'))

性能分析工具

"webpack-bundle-analyzer": "4.4.2",
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin  

 

分包

"script-ext-html-webpack-plugin": "2.1.4",

config.when(!IS_DEV, config => {
      config
        .plugin('ScriptExtHtmlWebpackPlugin')
        .after('html')
        .use('script-ext-html-webpack-plugin', [
          {
            // `runtime` must same as runtimeChunk name. default is `runtime`
            inline: /runtime\..*\.js$/
          }
        ])
        .end()
      config.optimization.splitChunks({
        chunks: 'all',
        minSize: 20000,
        maxAsyncRequests: 6,
        maxInitialRequests: 6,
        enforceSizeThreshold: 50000,
        cacheGroups: {
          commons: {
            name: 'chunk-commons',
            test: resolve('src/components'), // can customize your rules
            minChunks: 3, //  minimum common number
            priority: 5,
            reuseExistingChunk: true,
            maxSize: 10240
          },
          libs: {
            name: 'chunk-libs',
            chunks: 'initial', // only package third parties that are initially dependent
            test: /[\\/]node_modules[\\/]/,
            priority: 10
            // maxSize: 2048
          },
          antdv: {
            name: 'chunk-ant-design-vue',
            chunks: 'initial', // only package third parties that are initially dependent
            test: /[\\/]node_modules[\\/]ant-design-vue[\\/]/,
            priority: 13
            // maxSize: 2048
          },
          monacoeditor: {
            name: 'chunk-monaco-editor',
            chunks: 'initial', // only package third parties that are initially dependent
            test: /[\\/]node_modules[\\/]monaco-editor[\\/]/,
            priority: 11
          },
          jsonaceeditor: {
            name: 'chunk-vue2-ace-editor',
            chunks: 'initial', // only package third parties that are initially dependent
            test: /[\\/]node_modules[\\/]vue2-ace-editor[\\/]/,
            priority: 11
          },
        }
      })
      config.optimization.runtimeChunk('single')
      return {
        plugins: [new BundleAnalyzerPlugin()]
      }
    })

 

 

删除预加载

config.plugins.delete('preload') // TODO: need test
config.plugins.delete('prefetch') // TODO: need test

 

设置别名

config.resolve.alias
  .set('assets',resolve('src/assets'))
  .set('components',resolve('src/components'))
  .set('static',resolve('src/static'))
  .delete('static') // 删掉指定的别名

 

标签:vue,cli,--,svg,loader,test,config,name
From: https://www.cnblogs.com/wxyblog/p/17109750.html

相关文章

  • chatGPT注册图文教程,亲测有效
    前置条件:1、   能FQ。因为chatGPT暂时不对中国开放,如果不会FQ的请自行搜索“网络代理、v2rayN、VPN代理”等关键词,本文不提供相关教程。2、   有国外的手机号用......
  • 71udp,tcp
    udp相当与写信,tcp相当于打电话1、基于连接与无连接;2、对系统资源的要求(TCP较多,UDP少);3、UDP程序结构较简单;4、流模式与数据报模式;5、TCP保证数据正确性,UDP可能丢包;6......
  • npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve问题
    问题解决  通过上面的图片,我们其实已经得到了解决方案:npminstallhusky-D--legacy-peer-deps......
  • 修复 KubeSphere 内置 Jenkins 的 Apache Log4j2 漏洞
    作者:老Z,中电信数智科技有限公司山东分公司运维架构师,云原生爱好者,目前专注于云原生运维,云原生领域技术栈涉及Kubernetes、KubeSphere、DevOps、OpenStack、Ansible等。......
  • 将URL地址进行编码和解码
    java中的解码java.net.URLDecoder.decode(url,解码格式)解码器URLEncoder.decode(url,编码格式)将普通字符串变成指定格式的字符串packagecom.zixue.springbootmyb......
  • 软考-软件工程笔记
    1、软件开发方法2、软件开发模型3、逆向工程4、需求工程5、软件系统建模6、系统设计7、测试与评审8、系统运行与软件维护 一、软件开发方法1、结构化法传统的......
  • 打造IM生态,WorkPlus个性定制让企业业务管理再升级
    企业即时通讯是企业办公交流必不可少的工具,因其安全性、易管理性现在越来越受到广大企业的青睐,虽然很多企业都已经意识到即时通讯之于沟通和办公效率提高的重要性,但是大部......
  • 私有化即时通讯软件可以保证员工的通讯安全吗?
    企业内部即时通讯和聊天并不是什么新鲜事,毕竟沟通管理是企业应用软件中的一个非常重要的模块,也是企业进行数字化建设必不可少的一部分。但是,即时通讯的企业版与个人使用的......
  • C++ 机试题1
    #include<iostream>usingnamespacestd;intchazhao(intsum,stringsum1){if(sum1=="a"||sum1=="d"||sum1=="g"||sum1=="j"||sum1=="m"||sum1=="p"|......
  • Hgame-2023-week3-Re
    Hgame2023week3Reverse1.kmusic首先点开.exe文件运行(如果没有安装.netruntime,那么他会提醒你先下载,也可以在这里手动下载)。打开是一个如下界面:点击会有对应......