如何通过 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
并抛出错误
我正在尝试为一个简单的 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
并抛出错误