问题描述
我正在尝试为一个简单的monorepo应用程序进行概念验证。我决定只使用Yarn Workspaces
(我认为Lerna可能是过大了)来设置我的软件包体系结构。
我有一个shared
软件包,用于与前端和后端共享代码。我成功实现了使其能够在前端运行(由于我在前端使用NextJS,因此已经有一个名为next-transpile-module的NPM库可以使所有程序顺利运行),但是现在,我陷入了困境在后端,我不确定是否有可能,因为我无法在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
来编译代码共享包(如果需要)。
PS这与我在Unexpected token 'export'
软件包中遇到的错误(client
)完全相同,但是正如我提到的,名为next-transpile-module
的NPM库修复了它。是与转嫁有关的东西,但我不知道! :)
解决方法
从简单的角度来看,问题出在共享库的编译方式上。本质上,ESM与CJS。 ES模块使用exports
语法(尤其是前端库),但是Node仍然将CommonJS与module.exports
一起使用,因此它看到exports
并抛出错误