【NextJS】nextjs+qiankun遇ReferenceError: window is not defined

文章介绍了如何在使用QianKun作为主应用时,针对Next.js和React环境中出现的windowisnotdefined错误进行修复,通过删除不必要的QianKun模块导入并添加全局错误处理机制确保在窗口对象存在的条件下启动应用。
摘要由CSDN通过智能技术生成

实验环境:

  • qiankun: ^2.10.16
  • next: 14.1.0
  • react: ^18.2.0

根据官方手册快速上手教程(链接)

在这里插入图片描述

构建主程序实验代码:

  • qiankun部分:
// file: micro-base/plugins/qiankun/index.ts

import type { AppMetadata } from 'qiankun';
import { registerMicroApps, start } from "qiankun";
import { Microconfig } from "@/plugins/qiankun/microAppsConfig"

export const QianKunStart = function (){
    registerMicroApps(Microconfig);
    start();
}

export default QianKunStart;
  • 页面引用
// file: micro-base/app/page.tsx

import { useEffect } from "react";
import { QianKunStart } from "@/plugins/qiankun"

export default function Home() {
    useEffect(() => {
        console.log('QianKunStart...')
        QianKunStart();
    }, [])

    return (
        <>
            <header>header</header>
            <main>
                <ul>
                    <li><a href="/">首页</a></li>
                    <li><a href="/">子应用</a></li>
                </ul>
                <div id={'mainView'}></div>
            </main>
        </>
    );
}

运行后出现如下错误提示:
在这里插入图片描述

经过几番调试寻找,目前有个来至qiankun issues的解决方案:

基于这个方案,调整下上面实验代码:

  • qiankun部分:
// file: micro-base/plugins/qiankun/index.ts

import type { AppMetadata } from 'qiankun';
// import { registerMicroApps, start } from "qiankun"; // 这段删掉
import { Microconfig } from "@/plugins/qiankun/microAppsConfig"

export const QianKunStart = function (){
    // 新增
    if(typeof window !== undefined){
        // 新增
        const { registerMicroApps,start, addGlobalUncaughtErrorHandler } = require('qiankun');

        registerMicroApps(Microconfig, lifeCycles);
        start();
    }
}

export default QianKunStart;

实测可行!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
qiankun 是一个微前端框架,用于构建大型的、由多个子应用组成的前端项目。在使用 qiankun 启动子项目时,如果出现 "webpackjsonp is not defined" 的错误提示,可能是由于以下几个原因: 1. 共享依赖未正确引入:qiankun 在加载子应用时会使用 webpack 的 `Jsonp` 方法动态加载子应用的入口文件,如果子应用的依赖没有被正确的共享,会导致这个错误。解决方法是: - 确保子应用的依赖在 qiankun 的主应用中正确引入,并配置了正确的 `externals` 设置。 - 确保子应用的构建配置中没有将共享的依赖打包进子应用的入口文件中,可以通过 webpack 的 `splitChunks` 配置进行拆分。 2. 子应用的构建配置问题:如果子应用的构建配置中存在问题,例如没有设置正确的 `libraryTarget`、没有输出正确的 `publicPath` 等等,都可能导致 "webpackjsonp is not defined" 的错误。解决方法是: - 确保子应用的构建配置正确,特别是和加载机制有关的配置项。 - 检查子应用构建出的文件是否正确,例如入口文件是否正确生成了 `jsonp` 方法。 3. 其他因素:还可能由于其他原因导致的这个错误,例如 webpack 版本不兼容、webpack 插件或 loader 的配置问题等等。解决方法是: - 确保 qiankun 和子应用使用的 webpack 版本兼容。 - 检查 webpack 插件和 loader 的配置是否正确,可能需要修改或更新相关的插件和 loader 版本。 总之,针对 "webpackjsonp is not defined" 错误,需要仔细检查共享依赖的引入、子应用的构建配置以及其他可能的因素,确保配置正确,才能解决这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陀螺蚁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值