Docker从npm install中编写名为volume&node_modules的v3
使用撰写v3。
在构build我复制package.json并运行npm安装到
/var/www/project/node_modules
我不添加任何代码在构build阶段。
在撰写我添加卷
- ./www:/var/www/project/www
众所周知,绑定到/ www的主机将有效地“覆盖”我在构build阶段安装的node_modules。
这就是为什么我们之后添加一个命名模块的原因
- ./www:/var/www/project/www - modules:/var/www/project/www/node_modules
这是我们第一次build设/运行项目时的正常工作
由于命名卷“模块”不存在,所以构build阶段的www / node_modules将被挂载。
但是 ,这是实际的问题。
下一次我对package.json进行更改并执行以下操作:
docker-compose up --build
我可以看到新的npm模块是如何安装的,但是一旦连接了命名的“模块”卷(它现在存在上一次运行的东西),就会“覆盖”图像中新安装的模块。
上述添加一个命名卷的方法被build议在大量的地方作为节点模块问题的补救。 但据我所知,从很多testing中只能看到一次。
如果我每次更改package.json时都要重命名这个卷,那当然会起作用。
更好的做法是在运行npm install
之前,在入口脚本中包含rm
命令以清除节点模块。
作为替代scheme,您可以在运行另一个版本之前使用$ docker system prune
。 这将确保没有早期的事情被使用。