qiankun vue子应用升级webpack5问题记录
升级的方式是使用最新版本的 vue-cli 脚手架,重新创建一个新项目,然后复制 @vue/cli-xxx , vue 相关依赖最新版本到子应用项目 -> 核对babel, eslint相关配置的变化 -> 重新安装依赖,处理出现的相各种异常情况 -> 启动项目检查功能是否正常。
本次升级主要是为了使用 webpack5。
以下是记录的遇到的各种问题(不只包含webpack5的问题)。
configuration.output has an unknown property 'jsonpFunction'.
qiankun子应用需要按照官方文档进行webpack配置。
module.exports = {
  output: {
    library: `${packageName}-[name]`,
    libraryTarget: 'umd',
    jsonpFunction: `webpackJsonp_${packageName}`,
  }
};
以上示例中的 jsonpFunction 配置在 webpack5 中已经被删除,替换为 chunkLoadingGlobal,它们的作用都是提供一个唯一的名称。
module.exports = {
  output: {
    library: `${name}-[name]`,
    libraryTarget: 'umd',
    chunkLoadingGlobal: `webpackJsonp_${name}` // 替换配置
  }
};
options has an unknown property 'overlay'. | options has an unknown property 'disableHostCheck'.
webpack5 中 devServer.overlay 调整为 devServer.client.overlay。
webpack5 中 devServer.disableHostCheck 移除,使用 devServer.allowedHosts 替换。
ValidationError: Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.options has an unknown property 'plugins'.
webpack5 中 postcss-loader 配置调整,增加一层 postcssOptions。
eslint 相关错误
更新了 eslint 依赖包版本,eslint规则发生变化,会出现一些错误提示。按照提示进行修改或者调整规则。
Cannot GET /cooperation/board
主应用载入子应用资源时,找不到子应用资源。
在分析原因的过程中,并没有在 webpack5 的配置中找到原因,考虑到使用的是 vue-cli 脚手架,然后脚手架使用的 webpack5 , 所以搜索了 vue-cli的改动记录。
在这个PR中找到了原因。 https://github.com/vuejs/vue-cli/pull/6162
this PR will restrict request headers of historyApiFallback only work with [ 'text/html', 'application/xhtml+xml']
qiankun加载子应用时发起的fetch请求,且请求头里面没有 text/html 等header。所以historyApiFallback 配置对它无效。而本项目又是 history 模式路由,所以带路由 /xxx/xxx 过来请求,就会 404.
修改方案为自己传入historyApiFallback 配置.
    historyApiFallback: {
      index: '/xxx/index.html' // xxx为路径,和打包output配置有关
    },
Invalid options in vue.config.js: "css.requireModuleExtension" is not allowed
此问题为 vue-cli 升级导致的。
有个微应用使用了 css modules 方案,配置了 在 vue.config.js 中配置了 css.requireModuleExtension ,而该字段在 V5 版本中已经移除。https://github.com/vuejs/vue-cli/issues/6607 。用以下 css-loader配置来替代。
module.exports = {
  css: {
    loaderOptions: {
      css: {
        modules: {
          auto: () => true
        }
      }
    }
  }
}
less版本升级导致除法写法未转换
此问题是 less 版本升级导致。
有个微应用 less版本由 3.x 升级到 4.x 后,发现样式有问题。 后定位发现 padding: @m-gap / 2 @m-gap; 转换为了 padding: 16px / 2 16px,除法未做计算。
其原因是 https://less.bootcss.com/usage/#lessjs-options-math , 4.x 中修改了math的默认配置。 (@m-gap / 2) 或者 (@m-gap ./ 2) 才会默认转换。
qiankun vue子应用升级webpack5问题记录的更多相关文章
- vue子父组件的通信
		Element使用的是Vue2.0版本,众所周知在Vue 1.0升级到2.0中去除了$broadcast和$dispatch方法. 1.父组件向子组件传值 a.app.vue父组件 <templ ... 
- Vue 子组件向父组件传参
		直接上代码 <body> <div id="counter-event-example"> <p>{{ total }}</p> & ... 
- CentOS 6下gcc升级的操作记录(由默认的4.4.7升级到6.4.0版本)
		机房一台centos6.9机器部署了jenkins发布系统,开发人员在用node编译js,发现依赖的gcc版本低了,故需要将gcc升级到高版本(至少5.0版本以上),这里选择升级到6.4.0版本,下面 ... 
- Vue子组件调用父组件的方法
		Vue子组件调用父组件的方法 Vue中子组件调用父组件的方法,这里有三种方法提供参考 第一种方法是直接在子组件中通过this.$parent.event来调用父组件的方法 父组件 <temp ... 
- 【前端vue开发】vue子调父 $emit (把子组件的数据传给父组件)
		ps:App.vue 父组件 Hello.vue 子组件 <!--App.vue :--> <template> <div id="app"> ... 
- Vue 子组件调用父组件 $emit
		<!DOCTYPE html><html> <head> <meta charset="utf-8"> ... 
- vue子组件通知父组件使用方法
		vue子组件通知父组件使用方法 <template> <mt-field placeholder="验证码" v-model="getverifycod ... 
- vue子传父、父传子
		子传父 vue子传父使用$emit传值 子组件: <template> <div> <button @click="toParent">点击传到 ... 
- Vue子组件传递数据给父组件
		子组件通过this.$emit(event,data)传递数据到父组件 以下是例子: father.vue 父组件 <template> <div> <child @ne ... 
- vue子向父传值
		要弄懂子组件如何向父组件传值,需要理清步骤 子组件向父组件传值的步骤 一:子组件在组件标签上通过绑定事件的方式向父组件发射数据 <!--html--><template id=&qu ... 
随机推荐
- mysql主从同步复制
			主从同步原理 master记录数据操作 开启binlog日志 设置binlog日志格式 指定server_id slave启用俩个线程 slave_io:复制master主机binlog日志为文件里的 ... 
- idea的Tomcat的配置
			1.创建一个web项目 2.创建项目完成后,配置 点击add 3.点击扳手 选择tomcat Server ----->Local 4.选择tomcat的文件夹路径 点击ok 5.再次点 ... 
- 深入理解css 笔记(6)
			网格布局:flexbox 彻底改变了网页布局方式,但这只是开始.它还有一个大哥:另一个称作网格布局模块的新规范.这两个规范提供了一种前所未有的全功能布局引擎.跟 flexbox 类似,网格布局也是作用 ... 
- 腾讯云等Linux环境下Redis安装配置
			1.下载redis解压安装命令教程 https://www.cnblogs.com/hunanzp/p/12304622.html 2.配置远程连接 修改bind 127.0.0.0 为 bind ... 
- mysql数据库备份(windows环境)
			备份:cmd输入指令,按照新数据库的字符集去备份,备份等待即可: 恢复:之前新建数据库,注意字符集问题,输入指令还原即可: 
- 2021.06.29 mac系统下zsh: command not found:***报错问题
			最近老是遇到zsh: command not found:vue,zsh: command not found:nrm, zsh: command not found:tsc, zsh: comman ... 
- 2020.11.24 typeScript命名空间
			命名空间:定义了标识符的可见范围,一个标识符可以在多个命名空间中定义,它在不同命名空间的含义是互不相干的.在一个新的命名空间可以定义任何新的标识符,它不会与已有的任何标识符发生冲突. 使用: 这个时候 ... 
- spring aop切面说明
			execution:处理Join Point的类型,例如call.execution (* android.app.Activity.on**(..)):这个是最重要的表达式,第一个*表示返回值,*表 ... 
- Web自动化——介绍与安装以及第一个web自动化程序(一)
			1. 为什么要做Web自动化测试 什么是web自动化测试 让程序代替人,去验证网页上功能的过程 web自动化测试与手工测试的比较 web自动化测试执行的测试用例是手工功能测试的子集 web自动化测试的 ... 
- 从源码彻底理解 Prometheus/VictoriaMetrics 中的 relabel_configs/metric_relabel_configs 配置
			背景 最近接手维护了公司的指标监控系统,之后踩到坑就没站起来过.. 本次问题的起因是我们配置了一些指标的删除策略没有生效: - action: drop_metrics regex: "^e ... 
