【发布时间】:2018-10-17 08:08:48
【问题描述】:
我们目前正在与我们的团队一起为我们的网站研究 CI/CD。我们最近还适应了 monorepo 结构,因为这使我们的依赖关系和概览变得更加容易。目前测试等已为 CI 做好准备,但我现在正在部署。我想创建所需包的 docker 映像。
我考虑的事情:
1) 将完整的 monorepo 拉入 docker 项目,但在我们的项目中运行 yarn install 会导致项目总大小约为 700MB,这主要是由于我们的 react native 应用程序甚至不应该有 docker 映像。此外,每次我们必须部署新版本时,这都会导致很长的图像拉取时间
2) 以某种方式捆绑我的项目。使用我们的前端,我们有工作设置,所以应该没问题。但我只是尝试将 webpack 添加到我们的 由于这个问题,express api 并在我的包中出现错误:https://github.com/mapbox/node-pre-gyp/issues/308
3) 我尝试只在需要的项目中运行 yarn install,但这仍然会为我的所有项目安装我的 node_modules。
4) 运行 npm 包:pkg。这导致单个文件准备好在具有特定节点版本的特定系统上运行。这确实有效,但我不确定这将如何处理错误和崩溃。
5) 另一种解决方案可能是将项目复制到工作区之外并在那里运行纱线安装。这样做的问题是纱线工作空间(隐式链接依赖项)的使用已经过去了。我必须明确添加我的其他工作区依赖项。一种可能性是从某个提交哈希中引用它们,我现在将对其进行测试。 (编辑:您似乎不能将子目录作为纱线包引用)
6) ???
我想知道我是否缺少一个选项,即只为某个项目提供所需的 node_modules,这样我就可以保持我的 docker 镜像很小。
【问题讨论】:
-
您找到解决方案了吗?我正在做一个类似的项目。
-
如果你将你的包发布到npm,这不会是一个问题,你不应该在部署过程中直接依赖磁盘中的包,而应该依赖提交到注册表的那个。自动连接纱线只应在开发过程中使用。如果您牢记这一点,那么您只需将服务目录复制到 docker 映像并在那里安装 deps 即可正常部署。
标签: node.js express docker monorepo yarn-workspaces