vue 使用webpack打包,出现路径404 ,导致白屏webpack-bundle-analyzer使用

news2024/11/15 20:07:46

使用webpack打包时,遇到两个问题,导致页面出现白屏
一个是cdn对于静态文件限制大小,不能大于2MB,超过这个大小后,就不能上传cdn成功,导致页面加载时,长时间白屏,且找不到资源,因为这个大文件就没有上传成功,使用webpack的splitChunksPlugin就可以解决这个问题。

具体的参数,下面简单介绍下,也可根据自己情况,按官网配置:

  • chunks 选项,决定要提取哪些模块
    默认是 async :只提取异步加载的模块出来打包到一个文件中。
    异步加载的模块:通过 import(‘xxx’) 或 require([‘xxx’],() =>{}) 加载的模块。
  • initial:提取同步加载和异步加载模块;
    如果 xxx 在项目中异步加载了,也同步加载了,那么 xxx 这个模块会被提取两次,分别打包到不同的文件中。
    同步加载的模块:通过 import xxx 或 require(‘xxx’) 加载的模块。
  • all:不管异步加载还是同步加载的模块都提取出来,打包到一个文件中;
  • minSize 选项:规定被提取的模块在压缩前的大小最小值,单位为字节;
    默认为30000,只有超过了30000字节才会被提取。
  • maxSize 选项:把提取出来的模块打包生成的文件大小不能超过maxSize值;
    如果超过了,要对其进行分割并打包生成新的文件。
    单位为字节,默认为0,表示不限制大小。
  • minChunks 选项:表示要被提取的模块最小被引用次数,引用次数超过或等于minChunks值,才能被提取。
  • maxAsyncRequests 选项:最大的按需(异步)加载次数,默认为 6;
  • maxInitialRequests 选项:打包后的入口文件加载时,还能同时加载js文件的数量(包括入口文件),默认为4。

优先级 :maxInitialRequests / maxAsyncRequests < maxSize < minSize;

  • automaticNameDelimiter 选项:打包生成的js文件名的分割符,默认为:~
  • name选项:打包生成 js 文件的名称;
  • cacheGroups 选项,核心重点,配置提取模块的方案,里面每一项代表一个提取模块的方案。

下面是 cacheGroups 每项中特有的选项,其余选项和外面一致,若 cacheGroups 每项中有,就按配置的,没有就使用外面配置的;

  • test 选项:
    用来匹配要提取的模块的资源路径或名称,值是正则或函数;

  • priority 选项:
    方案的优先级,值越大表示提取模块时优先采用此方案,默认值为0;

  • reuseExistingChunk 选项:true / false。
    为true时,如果当前要提取的模块,在已经在打包生成的js文件中存在,则将重用该模块,而不是把当前要提取的模块打包生成新的 js 文件。

  • enforce选项:true / false。
    为true时,忽略minSize,minChunks,maxAsyncRequests和maxInitialRequests外面选项

后来根据webpack官网的文档,对包进行了分包处理,但是打包后,在页面中仍然出现了白屏,这个时候,一定要记得看下浏览器,打开调试器,看下是否是资源问题,这也就是我遇到的另一个问题,打包后,路径中有个波浪线,类似于http:///app~2b8575a2.a99ad819.js ,所以导致拉不到数据源,修改下即可。

splitChunks.automaticNameDelimiter string = ‘~’

By default webpack will generate names using origin and name of the chunk (e.g. vendors~main.js). This option lets you specify the delimiter to use for the generated names. 翻译过来:默认情况下,webpack将使用块的来源和名称生成名称(例如vendors~main.js)。此选项允许您指定用于生成的名称的分隔符 ,这个分隔符是默认的~ ,我替换了下,用‘-’就好啦。

官网地址:https://webpack.docschina.org/plugins/split-chunks-plugin/点击查看官网文档

直接上代码 vue.config.js:

const publicPath = process.env.VUE_APP_PUBLIC_PATH

module.exports = {
  publicPath,
  devServer: {
    disableHostCheck: true,
    port: 80
  },
  configureWebpack: (config) => {
    config.devtool = isSoureMap ? 'hidden-source-map' : 'eval-cheap-module-source-map'
    config.entry = { app: './src/main.js' }
    if (process.env.NODE_ENV === 'production') {
      // 分割文件
      config.optimization.splitChunks = {
        maxSize: 200000, //提取出来的模块打包生成的文件大小不能超过maxSize值
        automaticNameDelimiter: '-', // 打包生成的js文件名的分割符
        cacheGroups: { // 配置提取模块的方案,里面每一项代表一个提取模块的方案
          vendor: {
            test: /[\\/]node_modules[\\/]/,  // 用来匹配要提取的模块的资源路径或名称,值是正则或函数;
            name(module) {
              const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]
              return `chunk.${packageName.replace('@', '')}`
            },
            priority: 10 // 方案的优先级,值越大表示提取模块时优先采用此方案,默认值为0
          }
        }
      }
    }
  },
  // 查看打包文件体积大小
  chainWebpack(config) {
    config
      .plugin('webpack-bundle-analyzer')
      .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
  },
  lintOnSave: true
}

上面提及的webpack-bundle-analyzer 插件,可以在页面上看到引入的js文件大小,如需要,可进行如下操作:

  1. 安装下webpack-bundle-analyzer包
 npm install webpack-bundle-analyzer --save
  1. package.json 修改 scripts
"scripts": {
    "dev": "vue-cli-service serve --mode staging",
    "build:report": "vue-cli-service build --report"  
  }
  1. vue.config.js中添加
// 查看打包文件体积大小
  chainWebpack(config) {
    config
      .plugin('webpack-bundle-analyzer')
      .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
  },
  1. 命令行执行命令
npm run build:report

就可以看到引入的包大小了。
大概长这个样子:
示例图片

可以将比较大的文件提取出来,打包时不打包进入主文件,以script方法引入,这样我们的包就不会那么大了。
记录一下~~~
给大家推荐一个博主写的,更为细致:去查看
生活不易,愿你永远热泪盈眶,加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/12406.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

INTERSPEECH 2022|FS-CANet: 基于全带子带交叉注意力机制的语音增强

INTERSPEECH 2022 FS-CANet: 基于全带子带交叉注意力机制的语音增强 本文由清华大学与腾讯天籁实验室、香港中文大学合作&#xff0c;提出了一个全带-子带交叉注意力&#xff08;FSCA&#xff09;模块来交互融合全局信息和局部信息&#xff0c;并将其应用于FullSubNet&#…

Dubbo源码(十) 与Spring一起学习Dubbo里的Aware

目录 一、Spring 1.BeanNameAware 2. BeanClassLoaderAware 3. ApplicationContextAware 4. EnvironmentAware 5. ApplicationEventPublisherAware 6. aware注入时机 二、Dubbo 1. ExtensionAccessorAware 三、小结 现在很多同行做java开发几年了&#xff0c;被迫停留…

[附源码]java毕业设计竞价拍卖系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

灵雀云ACP 斩获“2022金边奖-最佳云原生边缘云平台”

近日&#xff0c;由边缘计算社区主办的全球边缘计算大会上海站成功召开&#xff0c;灵雀云凭借出色的全栈云原生技术实力、专业的高品质服务以及在边缘云场景的丰富落地实践&#xff0c;斩获“2022金边奖-最佳云原生边缘云平台”奖项。 “十四五”规划中明确指出要“协同发展云…

使用kubeadm部署kubernetes集群

文章目录环境环境初始化配置hosts配置时钟同步禁用firewalld、selinux、postfix禁用swap分区开启IP转发、修改内核信息配置IPVS安装Docker配置yum源安装docker-ce配置镜像加速器安装kubernetes组件配置yum源安装kubeadm、kubelet、kubectl工具配置containerd部署master安装pod网…

UTF-8、Unicode编码与汉字的相关内容

介绍 UTF-8是Unicode的一种实现方式&#xff0c;比如一个汉字用Unicode编码表示是两个字节&#xff0c;而用UTF8编码表示则为3个字节。 之所以写这篇文章&#xff0c;是因为我的webserver程序中&#xff0c;浏览器发送资源请求且该资源名为中文时出现了编码问题。 UTF8编码 U…

【SQL 中级语法 2】自连接的用法

SQL的连接运算根据其特征的不同&#xff0c;有着不同的名称&#xff0c;如内连接、外连接、交叉连接等。一般来说&#xff0c;这些连接大都是以不同的表或视图为对象进行的&#xff0c;但针对相同的表或相同的视图的连接也并没有被禁止。针对相同的表进行的连接被称为“自连接”…

python之排序

目录1. 对一维array中的数值进行从大到小排序2. 将DataFrame的列逆序排列3. 根据字符串中的数字进行排序3.2 啊4. 列表参考资料1. 对一维array中的数值进行从大到小排序 import numpy as np a np.array([5,6,8,2,1,7,5,3,90,78,62,5,4,2,9,4]) # b a.sort(axis0,kindquickso…

抑制剂拮抗剂等小分子化合物

小分子化合物主要通过调节其蛋白靶点的活性发挥作用。目前小分子化合物的蛋白靶点主要包括酶、离子通道和受体三大类。根据靶点种类的不同&#xff0c;小分子化合物发挥着不同的作用。 1. 酶的抑制剂&#xff08;enzyme inhibitor&#xff09; 在所有的小分子化合物中&#xff…

【虹科案例】虹科脉冲发生器在半导体行业中的应用

非易失性存储单元特点 存储器研究的趋势是开发一种称为非易失性 RAM 的新型存储器&#xff0c;它将 RAM 的速度与大容量存储器的数据存储相结合。几年来有许多新单元类型的提议&#xff0c;例如 FeRAM&#xff08;铁电存储器&#xff09;、ReRAM&#xff08;电阻式存储器&…

C++string类的模拟实现以及经验分享

文章目录1. 为什么学习string类&#xff1f;1.1 C语言中的字符串1.2 两个面试题2. string类的实现构造函数&#xff1a;拷贝构造函数赋值运算符重载&#xff1a;析构函数流提取运算符重载1. 为什么学习string类&#xff1f; 1.1 C语言中的字符串 C语言中&#xff0c;字符串是…

5款十分小众,却又非常好用的良心软件

今天推荐5款十分小众的软件&#xff0c;知道的人不多&#xff0c;但是每个都是非常非常好用的&#xff0c;有兴趣的小伙伴可以自行搜索下载。 1.杀毒软件——火绒安全软件 首先说一下国产杀软之光&#xff0c;这是一款电脑安全软件&#xff0c;病毒库更新及时&#xff0c;界面…

【文档+视频】Verdi基础教程

目录 前言 1.Verdi 环境配置 2.VCS 产生Verdi 波形 1、tb中加入相应的系统函数 2、makefile中加入相应的选项 3.nTrace 1、如何调用Verdi&#xff1f; 【重点】 2、如何查看包含的设计架构&#xff1f; 3、如何查寻模块实例化的位置&#xff1f;【重点】 4、在nTrace…

Linux网络编程11——简单的web服务器

学习视频链接 02-web大练习的概述_bilibili_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1iJ411S7UA/?p132&spm_id_frompageDriver&vd_source0471cde1c644648fafd07b54e303c905 目录 一、项目展示 二、HTTP 协议基础 2.1 HTTP协议基础。 2.2 请求消息(R…

个人博客系统

目录一、项目简介二、项目开发流程2.1 准备工作2.2 实现Vue层2.2 实现Model层2.4 实现Controller层一、项目简介 基于servlet&#xff0c;采用前后端分离的方式&#xff0c;实现个人博客系统&#xff0c;功能包括&#xff1a;登录、注销、编辑、删除博客、发布博客等. 二、项…

用了10年开源工具,换了Smartbi后,3分钟搞定一份报表

大约在20年前&#xff0c;中国企业开始应用国外BI软件&#xff0c;报表工具可以说是BI 1.0时代的代表产物。在BI软件盛行之初&#xff0c;大部分软件都有开源的&#xff0c;从系统到数据库到各类工具、应用&#xff0c;当时大部分企业使用的BI软件包括报表工具&#xff0c;也都…

外汇天眼:外汇占款是什么意思? 与外汇储备之间的差额是由哪些原因造成的?

外汇占款就是指受资国中央银行回收外汇财产而相对投放的本币。 因为人民币是是非非随意换取代币&#xff0c;外资企业导入后需换取成人民币才可以进到商品流通应用&#xff0c;国家以便外资企业兑换外币要投入很多的资产提升了贷币的需要量&#xff0c;产生了外汇占款。 外汇占…

线程池源码解析 3.excute() 方法

线程池源码解析—excute()方法 execute() execute 方法是线程池的核心方法&#xff0c;所有的方法&#xff0c;包括包装的 FutureTask&#xff0c;都是调用这个方法。 大致流程 这里只是总结了一遍大致的流程&#xff0c;一些细节问题见下面的流程图或者参考源码。 当提交任…

【毕业设计】大数据电商销售预测分析 - python 数据分析

文章目录1 前言2 开始分析2.1 数据特征2.2 各项投入与销售额之间的关系2.3 建立销售额的预测模型3 最后1 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#x1f525; 对毕设有任何疑问都可以问学长哦! 这两年开始&#x…

Java8新特性 CompletableFuture

Java8新特性 CompletableFuture 什么是CompletableFuture&#xff1f; CompletableFuture类的设计灵感来自于 Google Guava 的 ListenableFuture 类&#xff0c;它实现了 Future 和 CompletionStage 接口并且新增了许多方法&#xff0c;它支持 lambda表达式&#xff0c;通过回…