node.js - 在 docker 中运行 npm update,而不使用该特定更新的缓存

标签 node.js docker npm npm-package

背景:

  1. 我正在使用 npmdockernode.js 中编写代码。我试图让我的 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. RUN npm uninstall @myorg/myorg-common-repo && npm install @myorg/myorg-common-repo
  2. 运行 npm update @myorg/myorg-common-repo --force

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

最佳答案

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

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

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

然后将此附加 block 添加到 Docker 文件中:

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

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

关于node.js - 在 docker 中运行 npm update,而不使用该特定更新的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63709147/

相关文章:

node.js - 如何使用express-validation和joi验证Express Nodejs字符串中的body参数是否可以转换为JSON

docker - docker attach 和 docker exec 的区别

node.js - 如何读取从Web客户端发送的nodejs服务器中的文件

docker - 在 Dockerfile 中运行脚本

docker - 代理背后的 Kubernetes Docker 容器

node.js - npm token 列表给出错误

laravel - 使用 Laravel 5.6 安装 TypeScript

docker - Jenkins 管道中的 npm 安装失败

node.js - Socket.IO 套接字 ID 是敏感/私有(private)数据吗?

javascript - 如何按排序键顺序获取对象中的最后一项