【问题标题】:yarn workspaces and docker纱线工作区和泊坞窗
【发布时间】:2018-06-01 19:51:03
【问题描述】:

我正在尝试使用 yarn 工作区,然后将我的应用程序放入 Docker 图片。

文件夹结构如下:

  • 根
    • Dockerfile
    • node_modules/
      • libA --> ../libA
    • libA/
      • ...
    • 应用/
      • ...

不幸的是 Docker 不支持符号链接 - 因此无法将根目录中的 node_modules 文件夹复制到 Docker 映像中,即使 Dockerfile 在我的情况下位于根目录中。

我可以做的一件事是使用 .dockerignore 排除符号链接,然后将真实目录复制到图像中。

另一个想法——我更喜欢——是有一个工具用符号链接的实际内容替换符号链接。不知道有没有这样的工具(最好是Javascript包)?

谢谢

【问题讨论】:

  • 你不应该使用yarn install在Docker容器环境中安装节点模块,而不是从你的开发环境中复制它们吗?这可以在你的 Dockerfile 中设置。
  • 哦,对了——没想到这种可能性。非常感谢!
  • 酷!如果您需要进一步的帮助,我可以将其作为答案,否则我相信您会对上述内容进行一些研究。
  • 我得到了你的答案:-)
  • 我猜 libA 已发布到 npmjs 存储库。如果你不想发布 libA 怎么办?

标签: docker yarn-workspaces


【解决方案1】:

Yarn 用于依赖管理,应该配置为在 Docker 容器中运行以安装必要的依赖,而不是从本地机器复制它们。

Docker 的主要好处是它允许您重新创建开发环境而不必担心运行它的机器 - 这同样适用于 Yarn,通过运行 yarn install 它会为相关架构安装正确的版本构建 Docker 映像的机器。

在您的 Dockerfile 中包含以下内容,然后配置您的工作目录:

RUN yarn install

那么你应该全部排序了!

您应该做的另一件事是在 .gitignore 和 node_modules 目录em>.dockerignore 文件,因此在分发代码时永远不会包含它。

TL;DR: 不要从本地机器复制 node_modules 目录,在 Dockerfile 中包含 RUN yarn install

【讨论】:

  • 但是yarn.lock在根目录中,而不是在子项目中,所以我们可以得到对依赖项的意外升级,这将导致各种混乱(我正在尝试修复的当前问题)。
  • 使用 Docker 构建上下文,您可以从根目录运行 Docker 构建,用于子项目。然后你可以拉入你需要的任何文件(例如yarn.lock)。
  • @ChrisKemp 您找到解决此问题的方法了吗?
  • 没有。我选择不共享公共的 node_modules 并让每个子项目自己管理。
猜你喜欢
  • 2017-10-12
  • 2018-07-18
  • 2021-11-05
  • 2018-12-20
  • 2019-06-28
  • 2016-10-20
  • 1970-01-01
  • 2020-02-09
  • 2019-08-05
相关资源
最近更新 更多