如何在没有symlink的情况下安装yarn工作区软件包?

时间:2019-06-13 17:57:32

标签: docker yarnpkg yarn-workspaces

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

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文件夹内的所有yarn工作区软件包都只是指向packages文件夹的符号链接...因此我无法删除该文件夹。

  • 如何获得yarn install来复制yarn工作区软件包的副本,而不是创建符号链接?

  • 或者,还有另一种方法来删除所有未使用的代码(例如,客户端代码),以便我的docker映像不会isn肿吗?

编辑:这个问题与docker有关,所以我不确定是否应该在标签中添加它?

2 个答案:

答案 0 :(得分:1)

在工作空间中运行yarn安装在任何软件包或根目录中都具有相同的作用。它会为每个软件包安装模块并对其进行符号链接等。

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

如果服务器对共享库有依赖性,则需要将其发布到npm,以便它也可以获取它。

答案 1 :(得分:1)

您可以使用yarn-workspace-isolator提取具有本地依赖关系的软件包,以免将它们发布到npm。

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

现在,正如医生所说:

  

您可以在yarn install内运行~/dist/my-package,然后执行yarn   安装所有依赖项,就好像您根本没有使用过工作区一样   无需发布任何工作空间依赖性。