node.js - 在 docker 中运行 npm update 而不使用该特定更新的缓存
问题描述
背景:
- 我正在
node.js
使用npm
、 和编写代码docker
。我正在尝试让我的 docker 文件在构建时使用缓存,因此不会花费太长时间。 - 我们有一个“通用”存储库,用于保存在各种存储库中使用的逻辑,并且通过 npm 包传播。
问题:
我希望 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",
我尝试在各种地方添加这些行,但似乎没有任何效果:
- 运行 npm 卸载 @myorg/myorg-common-repo && npm install @myorg/myorg-common-repo
- 运行 npm 更新@myorg/myorg-common-repo --force
关于如何让 docker 构建而不使用缓存的任何想法@myorg/myorg-common-repo
?
解决方案
所以我终于设法使用这个答案解决了这个问题:
我们要做的是使 Docker 文件中特定块的缓存无效,然后运行我们的更新命令。这是通过向命令(CLI 或 Makefile)添加构建参数来完成的,如下所示:
docker-compose -f docker-compose-dev.yml build --build-arg CACHEBUST=0
然后将此附加块添加到 Docker 文件中:
ARG CACHEBUST=1
USER node
RUN npm update @myorg/myorg-common-repo
这就是我们想要的。
使ARG CACHEBUST=1
缓存无效,并且npm update
命令在没有它的情况下运行。
推荐阅读
- docker - 无法通过达到拉取率限制来验证是否安装了 docker 引擎
- pyspark - 如何将处理后的火花流插入卡夫卡
- docker - Docker如何清除只读文件,以便我可以直接从我的计算机而不是容器中更改它?
- google-chrome - Manifest V3 Favicon API 服务不可用?
- python - tf.keras plot_model 错误:AttributeError:“ListWrapper”对象没有属性“名称”
- node.js - 创建一个包含多个函数的数组
- php - 更改路线和内容而不刷新
- sql-server - 尝试在 SQL Server 中计算 YearWeek - 202153 --> 202100
- elasticsearch - elasticsearch需要多少堆内存?
- android - View.OnClickListner 接口不会触发 onClick 方法?