我有一个dockerfile,如下所示,当我执行它时,我得到一个警告,我无法在RUN npm ci
步骤中弄清楚:
npm WARN old lockfile package-lock.json文件是用旧版本的npm创建的
我尝试了npm install
而不是npm ci
,并添加了--package-lock
标志,但我仍然得到这个警告。有没有办法解决这个问题?或者我应该忽略它?
Step 12/26 : RUN npm ci --production --package-lock && npm ci --production --package-lock --prefix ./ui-runner
---> Running in 3473c209b98c
npm WARN old lockfile
npm WARN old lockfile The package-lock.json file was created with an old version of npm,
npm WARN old lockfile so supplemental metadata must be fetched from the registry.
npm WARN old lockfile
npm WARN old lockfile This is a one-time fix-up, please be patient...
npm WARN old lockfile
这是我的Dockerfile。
FROM node:14.17.1-alpine3.13 AS builder
WORKDIR /usr/src/app
COPY package.json package-lock.json* ./
COPY ui-runner/package*.json ./ui-runner/
COPY .npmrc .npmrc
COPY ui-runner/.npmrc ./ui-runner/.npmrc
RUN npm -g install npm@7.19.1
RUN npm ci --production --package-lock && \
npm ci --production --package-lock --prefix ./ui-runner
RUN rm -f .npmrc && \
rm -f ui-runner/.npmrc
FROM node:14.17.1-alpine3.13
WORKDIR /usr/src/app
RUN apk update && apk add --no-cache curl bash
RUN addgroup -g 1001 test && \
adduser -S -u 1001 -G test test
RUN chown -R test /usr/src/app && \
chmod 755 /usr/src/app
COPY --from=builder /usr/src/app /usr/src/app
COPY . .
RUN npm run build:docker
USER test
EXPOSE 3000 9183
CMD [ "npm", "run", "start:ui-runner" ]
8条答案
按热度按时间t9eec4r01#
有几种方法可以处理此问题:
1.忽略它。这只是一个警告,不影响模块的安装。
1.运行
npm install --package-lock-only
(使用较新版本的npm
)以重新生成package-lock.json
。将package-lock.json
的更新版本提交到repo/Docker映像或其他文件。1.在生产环境中将
npm
降级到旧版本。(截至本文撰写时)长期支持(LTS)版本的Node.js。在这个问题中被问及的情况下,我想您可以从Dockerfile中删除RUN npm -g install npm@7.19.1
,而使用随Docker镜像安装的npm
版本(在这种情况下,几乎可以肯定是npm@6
,因为这是Node.js 14.x附带的)。1.如果您已经安装了
npm
的一个版本,但希望在旧版本的npm
上运行一个命令,否则保留新版本,您可以使用npx
(随npm
提供)来执行此操作。例如,即使您安装了版本7,npx npm@6 ci
也会在npm
版本6上运行npm ci
。yrdbyhpb2#
我也遇到过类似的问题,但是在构建镜像之前,在我的机器上升级npm
npm i -g npm
解决了这个问题。你可能仍然会收到警告消息,但镜像构建过程不会停止。v09wglhw3#
一个简单的解决方案是使用NVM来管理你的节点版本。特别是在Linux上,这节省了很多文件权限的麻烦,在不同的环境中开发,等等。NPM在他们的文档here中推荐了这一点。
这个错误对我来说是通过使用nvm切换Node.js版本来解决的,
如果你遇到奇怪的Node.js或npm问题,尝试切换到稍微旧一点或新一点的Node.js版本总是很容易的。
but5z9lq4#
我在升级我的npm版本后也遇到了同样的问题。这似乎是npm 7.19.1的bug,我建议降级到旧版本。
你可以在下面查看所有的npm版本
https://www.npmjs.com/package/npm?activeTab=versions
在控制台中使用以下命令安装所需版本,并将“V”替换为所需版本:
oxiaedzo5#
TL;DR
正如Trott所建议的,忽略警告是完全可以的。要修复警告/问题,请继续阅读。
问题/警告与以下行有关:
删除此行应可修复问题/警告。
说明
生成的package-lock是源代码库的一部分,* 理想情况下 * 是用Node.js〈=
node@14.x.x
附带的npm版本〈npm@7
生成的。我的猜测来自你的第一行Dockerfile。例如,Node.js LTS
v14.17.1
随npm@6.14.13
一起提供。请参阅完整的发布列表here。npm@5
,npm@6
生成package-lock@v1
,它现在是根据link的遗留版本。而最新版本npm@7
生成package-lock@v2
。当您这样做时:npm -g install npm@7.19.1
。它覆盖了您现有的package-lock@v1
,package-lock@v2
在此过程中发出警告。npm WARN old lockfile package-lock.json文件是用旧版本的npm创建的
更新后的Dockerfile如下所示:
bq8i3lrv6#
我也遇到了类似的问题。在阅读了之前的评论后,我注意到我机器上安装的Node.js版本是
v14.17.5
,npm版本是v7.19.1
。参考version history lookup并将npm降级为v6.14.14
(与节点v14.17.5
兼容)解决了问题。w80xi6nr7#
首先检查您的Node.js版本:转到cmd提示符并
根据版本,检查 node-sass 版本并安装它:
从 * node-sass *:
aor9mmx18#
我用过的Strapi v4也有类似的问题:
(1)
(old为14.X.X)
(2)
现在似乎工作。