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

How to do code sharing in NestJS through Yarn Workspaces

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

我有一个 shared 包,我用它来与前端和后端共享代码。我成功地实现了让它在前端工作(因为我正在使用 NextJS in the frontend there was already a NPM library named next-transpile-module 来让所有东西 运行 顺利启动)但是现在,我被困在后端,我不确定如果可能的话,因为我找不到关于 Google.

的信息

这是我尝试启动 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)

(Here's the affected code line that makes the API blow up).

它在 GitHub 上,因此您可以克隆或查看 src 代码:https://github.com/alfonmga/taurus

你需要在根目录运行yarn install安装项目依赖,然后你也可以运行在根目录yarn dev:client启动应用程序,yarn dev:api 启动 API 和 yarn build:shared 编译代码共享包(如果你愿意的话)。

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

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