gpt4 book ai didi

node.js - 为什么 COPY package*.json ./precedes COPY 。 .?

转载 作者:IT老高 更新时间:2023-10-28 21:22:07 25 4
gpt4 key购买 nike

在这个关于 Docker 的 Node.js 教程中: https://nodejs.org/en/docs/guides/nodejs-docker-webapp/

COPY package*.json ./有什么意义?

不是所有的东西都被 COPY 复制了。 .?

有问题的 Dockerfile:

FROM node:8

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm install --only=production

# Bundle app source
COPY . .

EXPOSE 8080
CMD [ "npm", "start" ]

最佳答案

这是 Dockerfiles(所有语言)中的常见模式。 npm install 步骤耗时较长,但只需要在包依赖发生变化时运行即可。因此,通常会看到一个步骤只是安装依赖项,而第二步是添加实际应用程序,因为它可以更快地重建容器。

你是对的,如果你只构建一次图像,这本质上是相同的;最后你会得到相同的文件系统内容。

不过,假设您在处理软件包时会发生这种情况。您更改了一些 src/*.js 文件,但没有更改 package.json。你运行 npm test ,它看起来不错。现在你重新运行 docker build。 Docker 注意到 package*.json 文件没有改变,所以它使用它第一次构建的相同镜像层而不重新运行任何东西,它也跳过了 npm install step(因为它假定在相同的输入文件系统上运行相同的命令会产生相同的输出文件系统)。所以这使得 second 构建运行得更快。

关于node.js - 为什么 COPY package*.json ./precedes COPY 。 .?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51533448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com