我有一个纱线工作区项目,看起来像这样:
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映像不会isn肿吗?
编辑:这个问题与docker有关,所以我不确定是否应该在标签中添加它?
答案 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 安装所有依赖项,就好像您根本没有使用过工作区一样 无需发布任何工作空间依赖性。