忽略 Docker 卷中的所有 `node_modules` 文件夹。

3

我正在尝试忽略每个工作区/子文件夹中的每个node_modules

事实是:在卷中通过文件夹名称忽略它是不可能的(真正地)。

所以有这个技巧:

volumes:
  - ./:/app
  - /app/node_modules

如果应用程序只有一个单独的 node_modules,那么它可以很好地工作。但是如果像下面的目录树中一样有多个呢?

project
|   node_modules/
|   docker-compose.yml
|   Dockerfile
|
└─── workspaces/
|   └─── client/
|       |   node_modules/
|   |
|   └─── server/
|       |   node_modules/

我真的需要在我的docker-compose.yml中将每个node_modules都挂载为卷吗?
volumes:
  - ./:/app
  - /app/node_modules
  - /app/workspaces/client/node_modules
  - /app/workspaces/server/node_modules

还有其他更好的方法吗?

我认为你可以将 node_modules 添加到 dockerignore 文件中。 - Dominik Matis
1
根据这篇文章,你不能忽略卷内的内容,因为它在构建后被共享到容器中。正如我所说,虽然有解决方案,但在需要忽略很多node_modules时并不是很可行。 - Anatole Lucet
1
我一直在想着 **/node_modules,但是我现在在手机上无法测试,抱歉。 - Dominik Matis
Dominik的解决方案可能有效,参见此回复:https://dev59.com/2lQJ5IYBdhLWcg3wZlCZ#56511833 - Mehdi
@Mehdi 也许我漏掉了什么,但是如果在主机的一个node_modules文件夹中有一个文件(我们称之为file.txt),那么当容器被构建时它应该可以工作,但是在容器启动后,卷将共享主机的node_modules到其中包含file.txt的容器。试一下,然后用docker exec运行ls命令,你会看到这个文件。但是,也许我漏掉了什么。 - Anatole Lucet
这里已经开了一个相关功能请求链接 - Diego
1个回答

0

重写为 "*node_modules"
希望能有所帮助


1
在哪里?作为一个卷? - Anatole Lucet
请使用此符号(- ./:*node_modules) - rahul
ERROR: for app Cannot create container for service app: invalid volume spec "*node_modules": invalid volume specification: '*node_modules': invalid mount config for type "volume": invalid mount path: '*node_modules' mount path must be absolute - Anatole Lucet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接