更新package.json中令人讨厌的Docker版本



我正在构建一个NodeJS应用程序,每次提交后,我都会为它构建一个docker映像

作为最佳实践,我复制packge.json和package-lock.json,然后运行npm install,然后复制项目的其余内容,以避免每次更改代码和重建映像时重新创建包和依赖项,Dockerfile看起来像这个

FROM node:alpine
WORKDIR /app
COPY ./package.json ./package-lock.json ./
RUN npm ci
COPY . .
EXPOSE 80
CMD ["npm", "start"]

问题是,当我更新我的项目代码时,我想更新package.json文件中的版本号,如果我这样做了,docker将不会使用缓存层,因为package.jsn被更改了,我该如何解决这个问题?我可以将软件包版本号移到package.json文件之外吗?

我不打算在npm上发布我的项目,因为它是一个内部项目,我可以忽略更新package.json中的版本号吗?这会影响什么吗?

感谢@kshitij-joshi

我已经更新了Dockerfile,它可以

# https://stackoverflow.com/a/58487433
# https://stackoverflow.com/a/73428012/3746664
######## Preperation
FROM node:alpine AS deps
COPY package.json package-lock.json ./
RUN npm version --allow-same-version 1.0.0

######## Building
FROM node:alpine
WORKDIR /app
COPY --from=deps package.json package-lock.json ./
RUN npm ci
COPY . .
EXPOSE 80
CMD ["npm", "start"]

尽管更新package.json是一种最佳实践,但它不是强制性的,也不会影响您个人项目中的任何内容。它主要用于npm出版。将来,如果计划发布它们,请让CI在发布过程中更新修补程序版本。

如果维护一个正确的package.json对你来说很重要,这里有一些有趣的想法Bumping package.json版本而不使docker缓存无效

最新更新