【发布时间】:2022-01-25 20:35:25
【问题描述】:
我已经构建了一个 ReactJS 库并将其发布到 NPM 并且在标准 ReactJS 项目中运行良好,但是我现在有一个 NextJS 并且我正在尝试将它添加到那里,我希望它可以正常工作,因为 NextJS 是一个带有一些附加功能的 ReactJS 顶部。
在 app.js 我有以下内容:
import dynamic from 'next/dynamic'
import {useEffect} from "react";
function MyApp({ Component, pageProps }) {
const {CrashCatch, CrashCatchProvider} = dynamic(import('crashcatchlib-reactjs'), { ssr: false })
let crash_catch = new CrashCatch();
crash_catch.initialiseCrashCatch("12978650", "d7kqcewvshoyxbp564f8tm0zl", "1.0.1");
return (
....
)
}
运行时我得到TypeError: CrashCatch is not a constructor
我尝试不使用动态导入并以import {CrashCatch, CrashCatchProvider} from "crashcatchlib-reactjs"; 进行标准导入,但随后出现错误SyntaxError: Cannot use import statement outside a module]
reactjs 库的源代码是开源的,因此可以在 GitHub 上的 https://github.com/Crash-Catch/CrashCatchLib-ReactJS 上找到它。 index.js 有 CrashCatch 类,它有构造函数,所以不知道为什么 NextJS 会以不同的方式对待它。
【问题讨论】:
-
您的构建过程可能无法解释动态
import语法,因此它不包含在可运行包中 -
我没有构建我的 reactjs 库,因为它只是一个简单的 JS 文件,所以我认为它不需要构建 - 我很可能被误认为是我创建的第一个库。是否有标准 JS/ReactJS 库的构建过程(我知道 Typescript 项目需要一个运行 tsc 的构建过程)
-
尝试在 HOC 内部初始化它?
-
这是否回答了您的问题:Import ES module in Next.js ERR_REQUIRE_ESM?尝试在您图书馆的
package.json中添加"type": "module"。或者,使用next-transpile-modules在 Next.js 应用程序中转译库。 -
谢谢,最近几天有点忙,希望几天后能收到。什么是 HOC?
标签: javascript reactjs next.js server-side-rendering