如何通过 Yarn Workspaces 在 NestJS 中进行代码共享

Alf*_*rga 6 typescript monorepo next.js nestjs yarn-workspaces

我正在尝试为一个简单的 monorepo 应用程序进行概念验证。我决定只使用Yarn Workspaces(我认为Lerna在这里可能有点过分)来设置我的包架构。

我有一个shared包,用于与前端和后端共享代码。我成功地使其适用于前端(因为我在前端使用NextJS ,所以已经有一个名为next-transpile-module的 NPM 库来让一切顺利运行),但现在,我被困在后端,我不确定这是否可能,因为我在谷歌上找不到信息。

这是我尝试启动 API 时抛出的错误:

/Users/Alfonso/git/taurus/packages/shared/dist/index.js:1
export var PRODUCT_NAME = "ACME";
^^^^^^

SyntaxError: Unexpected token 'export'
    at wrapSafe (internal/modules/cjs/loader.js:1054:16)
    at Module._compile (internal/modules/cjs/loader.js:1102:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Module.require (internal/modules/cjs/loader.js:1026:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (/Users/Alfonso/git/taurus/packages/api/dist/app.service.js:11:18)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
Run Code Online (Sandbox Code Playgroud)

Unexpected token 'export'这与我在包中遇到的错误 ( ) 完全相同client,但正如我提到的,名为 NPM 的库next-transpile-module修复了它。所以它应该与转译相关,但我不知道!:)

Jay*_*iel 2

从简单的角度来看,问题在于共享库的编译方式。本质上是 ESM 与 CJS 的对比。ES 模块使用exports语法(尤其是前端库),但 Node 仍然使用 CommonJS,module.exports因此它会看到exports并抛出错误

  • 解决方案是什么? (6认同)