记录一个项目发布后问题
Vue Router 报错 Uncaught TypeError: Cannot redefine property: $router
官方报错原因和解决方案:
qiankun 中的代码使用 Proxy 去代理父页面的 window,来实现的沙箱,在微应用中访问
window.Vue时,会先在自己的 window 里查找有没有Vue属性,如果没有就去父应用里查找。在 VueRouter 的代码里有这样三行代码,会在模块加载的时候就访问window.Vue这个变量,微应用中报这个错,一般是由于父应用中的 Vue 挂载到了父应用的window对象上了。
if (inBrowser && window.Vue) {
window.Vue.use(VueRouter);
}
可以从以下方式中选择一种来解决问题:
- 在主应用中不使用 CDN 等 external 的方式来加载
Vue框架,使用前端打包软件来加载模块 - 在主应用中,将
window.Vue变量改个名称,例如window.Vue2 = window.Vue; delete window.Vue
我的项目中的具体解决办法:采用第一种方式,将vue.config.js中的 configureWebpack配置项中的externals注释掉即可