在docker中运行npm update而不在该特定更新上使用缓存

问题描述

背景

  1. 我正在使用node.jsnpmdocker中编写代码。我正在尝试使Docker文件在构建时使用缓存,以免花费太长时间。
  2. 我们有一个“通用”存储库,用于保存在各种存储库中使用的逻辑,这种逻辑通过npm软件包传播。

问题:

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

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安装@ myorg / myorg-common-repo
  2. 运行npm update @ myorg / myorg-common-repo --force

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

解决方法

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

我们要做的是使Docker文件中特定块的缓存无效,然后运行我们的update命令。可以通过如下方式向命令(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命令在没有高速缓存的情况下运行。