Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
626 views
in Technique[技术] by (71.8m points)

每次使用 docker 构建前端应用镜像,如何解决 npm 依赖库每次重新 install 导致耗费时间问题?

假设现在有一个前端的项目,需要下载 npm 依赖库才能运行。
每次使用 docker 去构建这个前端项目镜像时都需要在镜像里面下载依赖库,才能成功运行,这样会耗费大量的时间。
我知道有一种做法是先在本地去 npm install,然后再将 node_modules 文件夹 COPY 到镜像里面,但这显然也不是很有效的方法,毕竟 node_modules 的文件量巨大。
然后我到 stackoverflow 查到了有个解决方法(还没有成功验证过),链接里面有提到这几个关键点:

ADD package.json /tmp/package.json
RUN cd /tmp && npm install
RUN mkdir -p /opt/app && cp -a /tmp/node_modules /opt/app/

但是我完全看不懂这个是什么意思,ADD 一个 package.json 到 /tmp/ 目录,然后下载依赖,后面才能再 copy 整个项目过去?里面还有提到 docker 缓存层,但是哪里用到了 docker 缓存层了,是 /tmp/ 目录的作用?
我个人还没有深入了解过 docker,希望各位大佬能指导一下,请问如何解决每次构建镜像时,npm 依赖库都需要重新 install 问题?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
每次使用 docker 去构建这个前端项目镜像时都需要在镜像里面下载依赖库,才能成功运行,这样会耗费大量的时间。

重点在“每次”。

按这个做法,只要你的 package.json 没有变化,那么只有第一次构建的时候会去下载依赖,以后的构建就不会再去下载依赖了,以为依赖(也就是这三行命令执行的结果)已经存在于 docker 的缓存里。

(package.json 变了还是会去重新下载的)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share

2.1m questions

2.1m answers

63 comments

56.6k users

...