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

How to install yarn workspace packages without symlink?

我有一个 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 in workspaces 在任何包或根目录中做同样的事情。它为每个包安装模块并对其进行符号链接等。

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

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

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

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

现在,正如文档所说:

You can simply run yarn install inside of ~/dist/my-package and yarn will install all dependencies as if you had not used workspaces at all without having to publish any workspace dependency.