【问题标题】:Run npm update in docker without using the cache on that specific update在 docker 中运行 npm update 而不使用该特定更新的缓存
【发布时间】:2020-09-04 16:36:30
【问题描述】:

背景:

  1. 我在node.js 中编写代码,使用npmdocker。我正在尝试让我的 docker 文件在构建时使用缓存,因此不会花费太长时间。
  2. 我们有一个“通用”存储库,用于保存各种存储库中使用的逻辑,并通过 npm 包进行传播。

问题:

我希望 docker 文件不使用我的“通用”包上的缓存。

Docker 文件:

FROM node:12-alpine as X

RUN npm i npm@latest -g
RUN mkdir /app && chown node:node /app
WORKDIR /app

RUN apk add --no-cache python3 make g++ tini \
    && apk add --update tzdata

USER node
COPY package*.json ./
COPY .npmrc .npmrc
RUN npm install --no-optional && npm cache clean --force
ENV PATH /app/node_modules/.bin:$PATH
COPY . .

package.json 有这一行:

"dependencies": {
  "@myorg/myorg-common-repo": "~1.0.13",

我尝试在多个地方添加这些行,但似乎没有任何效果:

  1. 运行 npm 卸载 @myorg/myorg-common-repo && npm install @myorg/myorg-common-repo
  2. 运行 npm 更新 @myorg/myorg-common-repo --force

关于如何让 docker 构建而不使用 @myorg/myorg-common-repo 上的缓存的任何想法?

【问题讨论】:

  • 当你更改package-lock.json文件中依赖库的版本号时,这将使Docker缓存失效并重新运行npm install序列。 (即使它是您编写的“共享代码”,也应将其视为库并为其使用适当的语义版本控制。)
  • @DavidMaze - 不幸的是,这没有帮助。我已经如上所述设置了我的package.json,并且docker-compose 命令使用了缓存而不检查myorg-common-repo 是否有更新的版本
  • package-lock.json中的版本号有变化吗?
  • @DavidMaze - 我不确定您是在问我是否更改了它,还是在此过程中更改了它,但无论如何,它没有更改。如果您建议我手动更改它 - 这不是我想要的,因为我也可以更改 package.json 文件本身

标签: node.js docker npm npm-package


【解决方案1】:

所以我终于设法使用this answer 解决了这个问题:

我们要做的是使 Docker 文件中特定块的缓存无效,然后运行我们的更新命令。这是通过向命令(CLI 或 Makefile)添加构建参数来完成的,如下所示:

docker-compose -f docker-compose-dev.yml build --build-arg CACHEBUST=0

然后将这个 additional 块添加到 Docker 文件中:

ARG CACHEBUST=1 
USER node
RUN npm update @myorg/myorg-common-repo

这就是我们想要的。
ARG CACHEBUST=1 使缓存无效,npm update 命令在没有它的情况下运行。

【讨论】:

  • 这对我不起作用。这只适用于 docker-compose 吗?
  • @TorstenN。 - 我用它作为 docker-build 的一部分
猜你喜欢
  • 2019-10-08
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多