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

Posted

技术标签:

【中文标题】如何安装没有符号链接的纱线工作区包?【英文标题】:How to install yarn workspace packages without symlink? 【发布时间】:2019-10-28 09:09:07 【问题描述】:

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

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 复制 yarn 工作区包而不是创建符号链接?

或者,是否有其他方法可以删除所有未使用的代码(例如客户端代码),这样我的 docker 映像就不会臃肿?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

一个不只是发布到 npm 如果另一个包需要它...我正在尝试使用本地包并复制它而不是符号链接它。【参考方案2】:

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

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

现在,正如医生所说:

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

【讨论】:

我马上去看看

以上是关于如何安装没有符号链接的纱线工作区包?的主要内容,如果未能解决你的问题,请参考以下文章

我如何确认我正确使用了纱线链接?

如何让 Apache 读取到不同分区的符号链接?

如何防止 Linux 符号链接中断

如何创建指向 mysql 的符号链接? (Mac, XAMPP)

python 用于安装/符号链接Alfred工作流的脚本。对工作流开发者有用。

如何创建符号链接或硬链接到另一个符号链接?