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

Posted

技术标签:

【中文标题】npm WARN old lockfile package-lock.json 文件是使用旧版本的 npm 创建的【英文标题】:npm WARN old lockfile The package-lock.json file was created with an old version of npm 【发布时间】:2021-09-16 12:13:26 【问题描述】:

我有一个如下的 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" ]

【问题讨论】:

【参考方案1】:

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

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

    运行npm ci 以确保您的node_modules 反映锁定文件,然后删除package-lock.json,然后运行npm install(使用较新版本的npm)以重新生成package-lock.json。因为node_modules 中的所有内容都将满足所有要求,所以npm install 的唯一变化将是新生成的package-lock.json 文件。将 package-lock.json 的更新版本提交到 repo/Docker 映像或其他任何内容。

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

    如果您已经安装了npm 的版本,但想使用旧版本的npm 运行一个命令,但要保留新版本,您可以使用npx(随npm)来去做。例如,npx npm@6 ci 将运行 npm cinpm 版本 6,即使您安装了版本 7。

【讨论】:

我要感谢#4。我对不同的项目有不同的 NPM 要求,这个命令让我来回不去头疼。有趣的是,您添加它时说它在这里可能没用,但它救了我哈哈 任何人都可以分享关于#2 中描述的解决方案如何工作的文档吗? @twocents 您在寻找什么样的文档?链条中的哪个部分没有意义?【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

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

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

npm install -g npm@"V"

【讨论】:

我也得到了类似的东西,它告诉我一些关于修复上游依赖项的信息,但是尝试安装它说它期望的版本会给我一个错误并且不会让我安装它。我收到一个错误,例如 --C:\Users\jjones2\Downloads\rnn5-01-first-example\rnn5-01-first-example>npm install npm ERR! ERESOLVE 无法解析依赖树 npm ERR!解决时:undefined@undefined npm ERR!发现:react@16.14.0 npm ERR! peer react@"*" from expo-permissions@9.0.1 npm ERR!无法解析 dep: npm ERR! peer react@"16.11.0" from react-native@0.62.2 这是一个 Docker 特定的问题。不知道你的回答对这个问题有什么帮助 我在 Windows 环境中遇到过这个问题,我没有使用 docker,这是一个 NPM 特定问题,而不是 Docker 特定问题。 ^ 在我的 mac 环境中也发生了这种情况,而不是使用 Docker。【参考方案4】:

TL;DR

作为Trott suggested,忽略警告完全没问题。要解决警告/问题,请继续阅读。

问题/警告与该行有关:

RUN npm -g install npm@7.19.1

删除此行应该可以解决问题/警告。

说明

生成的包锁是您的源存储库的一部分理想情况下是使用 npm 版本 npm@7 生成的,该版本随 Node.js node@14.x.x 一起提供。我的猜测来自您的第一行 Dockerfile

FROM node:14.17.1-alpine3.13 AS builder

例如 Node.js LTS v14.17.1 附带 npm@6.14.13。查看完整的发布列表here。

npm@5npm@6 生成 package-lock@v1,根据此 link,它现在是旧版本。最新版本的npm@7 生成package-lock@v2。当你这样做时:npm -g install npm@7.19.1。它会用package-lock@v2 覆盖您现有的package-lock@v1,并在此过程中发出警告。`

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

更新后的 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 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" ]

【讨论】:

没有 Docker 会导致什么? 如果您的包锁最初是使用 npm 版本 npm@7 生成的,然后您尝试使用npm@7 安装包。你会收到这个警告【参考方案5】:

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

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

nvm install 14
nvm use 14

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

【讨论】:

【参考方案6】:

我遇到了类似的问题。看了之前的cmets,发现我机器上安装的Node.js版本是v14.17.5,npm版本是v7.19.1。参考version history lookup 并将npm 降级为v6.14.14(兼容节点v14.17.5)已解决问题。

【讨论】:

【参考方案7】:

首先检查您的 Node.js 版本:转到 cmd 提示符并

node -v

根据版本,检查node-sass版本并安装:

npm node-sass@version

来自node-sass

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

【讨论】:

我尝试将其重新格式化以仅将实际代码作为代码。请检查这是否反映了您现在的意图。 这是在什么系统上测试的? Linux?

以上是关于npm WARN old lockfile package-lock.json 文件是使用旧版本的 npm 创建的的主要内容,如果未能解决你的问题,请参考以下文章

npm5 相当于 yarn 的 --pure-lockfile 标志?

npm notice created a lockfile as package-lock.json. You should commit this file.

npm notice created a lockfile as package-lock.json. You should commit this file.

npm notice created a lockfile as package-lock.json. You should commit this file.

npm WARN npm npm does not support Node.js v16.14.2 npm WARN npm You should probably upgrade to a new

text npm WARN版本无效