我已经建立了一个基于 Node.js (Typescript) 的 Monorepo,并且我使用 Turborepo 作为管理 Monorepo 的工具。我使用 pnpm 作为我的包管理器。
我的所有主要项目都位于 apps 文件夹中,而我想要跨项目共享的可重用组件则位于 package 文件夹中。
我的项目文件夹结构如下:
apps/
--- project 1/
---package.json
---app/
---node_modules/
...
--- project 2
---package.json
---app/
---node_modules/
...
packages/
---platform/
---package.json
---app/
---node_modules/
...
node_modules/
package.json
turbo.json
...
我的代码已编写,并且构建和 lint 在本地按预期工作。我现在想继续在 AWS Lambda 上的生产系统上部署
project 1
,并且我尝试使用 Gitlab CI 和 AWS CodePipelines - 我的问题是类似的。
我的问题是许多依赖项被组织为符号/硬链接。例如,
project 1
依赖于platform
,但这种依赖关系显示为符号链接。要将 project 1
发布到 Lambda,我需要它成为一个独立项目,所有依赖项都存在于 node_modules
文件夹中。当我压缩时链接没有用project 1
。
node_modules
从根 cp -rL
文件夹复制所有依赖项。然而,这似乎并没有解决一些错误:cp: cannot overwrite non-directory 'apps/omnibus-comments-handler/node_modules/././typescript' with directory 'node_modules/./typescript'
但是,即使如此,我也不确定这是否是正确的解决方案,因为它复制了不必要的依赖项。
npm
来代替,因为它以平面样式安装依赖项 - 然而,由于类似的挑战,即使这样似乎也不起作用。例如,platform
是工作区依赖项,并且是符号链接。我的目标是运行“构建”命令,使项目 1 的所有依赖项都存在于 node_modules 文件夹中,以便我可以将其压缩并将其部署到 Lambda。实现这一目标的最佳方法是什么?
这篇文章有点旧,也许我不明白你的问题,但是你尝试过吗
turbo prune
?
我认为它就是为了这个目的而制作的。