7

我有一个看起来像这样的纱线工作区项目:

node_modules
packages
  shared
    test.js
    package.json
  client
    test.js
    package.json
  server
    test.js
    package.json
package.json
server.Dockerfile

正如你所看到的,我有一个server.Dockerfile,它构建了一个服务器的镜像,我可以将它推送到不同的托管服务提供商,比如 Heroku 或 AWS。

我复制packagespackage.json进入这个容器:

COPY packages packages
COPY package.json .

然后我只安装server包的依赖项:

RUN cd packages/server && yarn install

现在所有依赖项都在node_modules文件夹中,接下来我想删除packages文件夹以从 docker 映像中删除任何不必要的代码(例如客户端代码):

RUN rm -rf packages

这样做的问题是node_modules文件夹内的所有纱线工作区包只是文件夹的符号链接packages......所以我无法删除该文件夹。

  • 如何yarn install制作纱线工作区包的副本而不是创建符号链接?

  • 或者,有没有另一种方法来删除所有未使用的代码(例如客户端代码),这样我的 docker 图像就不会臃肿?

4

2 回答 2

5

在工作空间中运行 yarn install 在任何包或根目录中执行相同的操作。它为每个包安装模块并对它们进行符号链接等。

如果您只想为服务器构建 docker 映像,您应该只将该包复制到容器中并将其作为独立包安装。

如果服务器依赖于共享库,您可以将其发布到 npm,以便它也可以获取它。

于 2019-07-12T11:34:56.843 回答
3

您可以使用yarn-workspace-isolator来提取具有本地依赖项的包,以避免将它们发布到 npm(如果您不想这样做)。

isolate-workspace -w my-package -o ~/dist/my-package

现在,正如医生所说:

您可以简单地在yarn install内部运行~/dist/my-package,yarn 将安装所有依赖项,就好像您根本没有使用工作区一样,而无需发布任何工作区依赖项。

于 2019-07-12T11:45:42.270 回答