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

我有一个 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

这是我的 文件夹

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" ]
221093 次浏览

升级了 npm 版本之后,我也遇到了同样的问题。它看起来像是 npm 7.19.1中的一个 bug,我建议将它降级到一个更旧的版本。

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

Https://www.npmjs.com/package/npm?activetab=versions

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

npm install -g npm@"V"

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

  1. 忽略它。它只是一个警告,不会影响模块的安装。

  2. 运行 npm install --package-lock-only(使用较新版本的 npm)以重新生成 package-lock.json。将更新版本的 package-lock.json提交到 repo/Docker 映像或其他内容。

  3. Downgrade npm to an older version in production. Consider running npm version 6 as that is what ships with the current (as of this writing) Long Term Support (LTS) version of Node.js. In the case being asked about in this question, I imagine you can just leave out the RUN npm -g install npm@7.19.1 from the Dockerfile and instead use the version of npm that is installed with the Docker image (which in this case will almost certainly be npm@6 since that is what ships with Node.js 14.x).

  4. 如果您已经安装了一个版本的 npm,但是希望使用较旧版本的 npm运行一个命令,但是保留较新版本,那么可以使用 npx(随 npm一起提供)来完成这项工作。例如,即使安装了版本7,npx npm@6 ci也会使用版本6运行 npm ci

我有一个类似的问题,但升级我的机器上的 npm npm i -g npm之前建立的形象为我解决了它。您可能仍然会收到警告消息,但是映像构建过程不会停止。

DR

作为 特洛特建议的,忽略警告是完全可以的。要修复警告/问题,请继续阅读。

问题/警告是这样的:

RUN npm -g install npm@7.19.1

删除此行将修复问题/警告。

解释

生成的包锁是源代码存储库 最好是这样的一部分,使用 npm version < npm@7生成,该版本附带 Node.js < = node@14.x.x。我的猜测来自你的第一行 文件夹

FROM node:14.17.1-alpine3.13 AS builder

例如,Node.js LTS v14.17.1附带 npm@6.14.13

npm@5, npm@6 generate package-lock@v1, which is now a legacy release as per this 链接. And npm@7 which is the latest release generates package-lock@v2. When you do: npm -g install npm@7.19.1. It overrides your existing package-lock@v1 with package-lock@v2 giving out the warning in the process.`

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

更新后的 文件夹应该是这样的:

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 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" ]

我也遇到过类似的问题。在阅读了前面的评论之后,我注意到我机器上安装的 Node.js 版本是 v14.17.5,npm 版本是 v7.19.1。参考 版本历史查询并将 npm 降级到 v6.14.14(与节点 v14.17.5兼容)已解决的问题。

First check for your Node.js version: Go to a cmd prompt and

node -v

根据版本,检查 Node-Sass版本并安装它:

npm node-sass@version

来自 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~:

Node 16  -  6.0+
Node 15  -  5.0+
Node 14  -  4.14+
Node 13  -  4.13+,
Node 12  -  4.12+
Node 11  -  4.10+,
Node 10  -  4.9+,
Node 8   -  4.5.3+,
Node <8  -  <5.0

一个简单的解决方案是使用 NVM来管理节点版本。特别是在 Linux 上,这节省了很多文件权限、在不同环境下开发等方面的麻烦。NPM 在他们的文档 给你中建议这样做。

我通过将 Node.js 版本切换为 nvm,解决了这个错误,

nvm install 14
nvm use 14

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

我在 Strapi v4上也遇到过类似的问题 我用:

1)

nvm use 16.15.1

(old 是14.X.X)

2)

npm rebuild
npm install

Seem to work now.