如何在没有符号链接的情况下安装纱线工作区包?
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。
我将 packages
和 package.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 图片不至于臃肿?
运行 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.
我有一个 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。
我将 packages
和 package.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 图片不至于臃肿?
运行 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.