如何在没有符号链接的情况下安装纱线工作区包?

Dav*_*nan 6 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
Run Code Online (Sandbox Code Playgroud)

如您所见,我有一个server.Dockerfile,它构建了一个服务器映像,我可以将其推送到不同的托管服务提供商,例如 Heroku 或 AWS。

我复制packages并package.json进入这个容器:

COPY packages packages
COPY package.json .
Run Code Online (Sandbox Code Playgroud)

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

RUN cd packages/server && yarn install
Run Code Online (Sandbox Code Playgroud)

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

RUN rm -rf packages
Run Code Online (Sandbox Code Playgroud)

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

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

  • 或者,是否有另一种方法可以删除所有未使用的代码(例如客户端代码),以便我的 docker 图像不会膨胀?

Pie*_*oui 4

您可以使用yarn-workspace-isolator提取包及其本地依赖项,以避免在您不愿意的情况下将它们发布到npm。

isolate-workspace -w my-package -o ~/dist/my-package
Run Code Online (Sandbox Code Playgroud)

现在,正如医生所说:

您只需yarn install在其中运行~/dist/my-package,yarn 就会安装所有依赖项,就像您根本没有使用过工作区一样,而无需发布任何工作区依赖项。