Typescript库只能为react或node编译,但不能同时为两者编译

jbose2ul  于 2022-12-14  发布在  TypeScript
关注(0)|答案(1)|浏览(112)

我有一个yarn工作区,它有一个typescript nodejs服务器和一个typescript react客户端(使用create react应用程序),我还有一个公共的typescript库,但无论如何我似乎不能让它同时为这两个服务器编译。
我不是一个javascriptMaven的任何标准。
这是公共项目的索引.ts:

export * from "./interfaces/AuthModels"

这是package.json的一部分:

{
    "main": "dist/index.js",
    "types": "dist/index.d.ts",
}

如果我为公共tsconfig.json设置以下内容,它将为nodejs编译:

{
    "compilerOptions": {
        "target": "esnext",
        "module": "commonjs",
        "moduleResolution": "node",
    },
}

但是在运行react应用程序时,我收到了以下错误:

Uncaught TypeError: h.keyframes is not a function
    at ../../node_modules/react-hot-toast/dist/index.js (error.tsx:3:1)
    at options.factory (react refresh:6:1)
    at __webpack_require__ (bootstrap:24:1)
    at fn (hot module replacement:62:1)
    at ../common/dist/components/Notifications.js (Notifications.js:5:1)
    at options.factory (react refresh:6:1)
    at __webpack_require__ (bootstrap:24:1)
    at fn (hot module replacement:62:1)
    at ../common/dist/index.js (index.js:25:1)
    at options.factory (react refresh:6:1)

如果我将下面的代码改为tsconfig.json,它将为react编译,但不会为nodejs编译:

{
    "compilerOptions": {
        "target": "esnext",
        "module": "esnext",
        "moduleResolution": "node",
    },
}

在nodejs上运行时出现以下错误:

export * from "./interfaces/AuthModels";
^^^^^^

SyntaxError: Unexpected token 'export'
xxls0lw8

xxls0lw81#

您将需要排除使用node.js中不存在的浏览器API的库的任何部分,或者在适当的条件检查之后控制访问,如下所示:

if (typeof window !== 'undefined') {
    // do browser stuff
}

“h.keyframes is not a function”(h.关键帧不是一个函数)错误告诉您所包含的内容与node.js不兼容。
一旦你完成了这些,你将需要把Typescript编译成commonjs模块格式(CJS)。这些可以直接在node.js中运行,并且因为你使用了create-react-app,你将有Webpack把它捆绑到浏览器端。这将修复你的“意外的令牌'export'”错误。

相关问题