package-lock.json 中缺少“resolved”和“integrity”

tal*_*aul 13 npm package.json package-lock.json

有时,在安装(不相关的)依赖项时,我会丢失resolved每个私有 Nexus 存储库依赖项的值,这意味着当我的构建服务器运行时,npm ci它会回退到尝试从 npm 存储库安装这些依赖项,这显然会失败。

我在用npm 8.5.5/node 16.15

我正在使用 NPM 的工作区功能来构建 monorepo,这意味着我有几个项目package.json文件以及一个根目录package.json

我的.npmrc(在根级别)看起来像这样:

engine-strict=true
@foo:registry=http://prod-nexus.foo.com/repository/bar/
always-auth=true
Run Code Online (Sandbox Code Playgroud)

在(不相关的、随机的)安装之后,我package-lock.json将进行以下更改:

    "@foo": {
        "version": "1.2.3",
-       "resolved": "http://prod-nexus.foo.com/repository/bar/@foo/-/lib-1.2.3.tgz,
-       "integrity": "sha...",
+       "license": "MIT",
        "dependencies": { ....
Run Code Online (Sandbox Code Playgroud)

请注意,resolved和integrity字段已消失,并且license已添加。

我已经多次遇到这个问题,每次我都通过回滚和一些手动编辑来解决它,最终它消失了,但我真的需要了解发生了什么。

造成这种情况的原因是什么,为什么它是随机的,我可以采取什么措施来防御它?

aar*_*man 9

这可能与问题有关https://github.com/npm/cli/issues/4263

  1. 清理 npm 缓存npm cache clean -f
  2. npm install再次运行

如果这不起作用,请在删除更多内容的同时重试:

  1. 清理 npm 缓存npm cache clean -f
  2. node_modules在项目文件夹中删除
  3. 删除package-lock.json文件
  4. npm install再次运行