npm WARN old lockfile package-lock.json 文件是用旧版本的 npm 创建的

sem*_*ral 23 node.js npm docker dockerfile

我有一个 dockerfile 如下,但在RUN npm ci步骤中,有一个npm WARN old lockfile The package-lock.json file was created with an old version of 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 
Run Code Online (Sandbox Code Playgroud)

这是 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" ]
Run Code Online (Sandbox Code Playgroud)

Tro*_*ott 12

有几种方法可以解决这个问题:

  1. 忽略它。这只是一个警告,发生的npm只是向package-lock.json文件添加信息。

  2. 在您的开发环境中npm ci使用更新版本运行npm。它将发出警告并更新package-lock.json文件。将该版本提交到 repo/Docker 映像或其他任何内容。

  3. npm在生产中降级到旧版本。考虑运行npm版本 6,因为这是 Node.js 当前(在撰写本文时)LTS 版本附带的版本。在这个问题中被问到的情况下,我想你可以RUN npm -g install npm@7.19.1从 Dockerfile 中省略 ,而是使用npm与 Docker 映像一起安装的版本(在这种情况下几乎可以肯定,npm@6因为这是 Node 附带的.js 14.x)。

  4. 在这里可能没有用,但为了完整起见,我会提到,如果您已经安装了一个版本npm但想要使用旧版本运行一个命令npm但保留较新版本,您可以使用npx(随附npm)来执行那。使用该-p标志来指定npm您想要的版本。例如,即使您安装了版本 7 ,npx -p npm@6 npm ci也会npm cinpm版本 6运行。

  • @twocents 您在寻找什么样的文档?链条中的哪一部分没有意义? (3认同)
  • 我想在#4 上感谢你。我对不同的项目有不同的 NPM 要求,这个命令让我在来回的过程中非常头疼。有趣的是你添加了它,说它在这里可能没有用,但它救了我哈哈 (2认同)
  • #4 应该是一个单独的、被接受的答案。<3 (2认同)

Gre*_*ley 9

一个简单的解决方案是使用NVM来管理节点版本。特别是在 Linux 上,这可以节省很多文件权限、在不同环境中开发等方面的麻烦。NPM 在其文档中推荐了这一点

对我来说,这个错误是通过使用 nvm 切换 Node.js 版本来解决的,

nvm install 14
nvm use 14
Run Code Online (Sandbox Code Playgroud)

如果您遇到奇怪的 Node.js 或 npm 问题,尝试切换到稍旧或较新的 Node.js 版本总是一件容易的事情。


Kut*_*ple 7

我遇到了类似的问题,但 npm i -g npm在构建镜像之前在我的机器上升级 npm 解决了这个问题。您可能仍然会收到警告消息,但映像构建过程不会停止。


小智 5

升级 npm 版本后我也遇到了同样的问题。这似乎是 npm 7.19.1 的一个错误,我建议降级到旧版本。

您可以在下面查看所有 npm 版本

https://www.npmjs.com/package/npm?activeTab=versions

在控制台中使用此命令安装所需的版本,并将“V”替换为您所需的版本:

npm install -g npm@"V"
Run Code Online (Sandbox Code Playgroud)