npm ci 命令失败并显示“无法读取未定义的属性‘@angular/animations’”

ume*_*hta 13 node.js npm angular

在为我的 Angular 项目执行 docker build 时,在npm ci步骤中,出现以下错误: Cannot read property '@angular/animations' of undefined

由于没有正确的错误,我们无法找到解决方案。

包和节点的版本:

  • @角度/动画 - 15.2.9
  • Node.Js - 18.14.2
  • 国家公共管理 - 9.5
  • 角度 CLI - 15.2.8

到目前为止我已经尝试过:

  • 交叉检查动画模块的 package.json 文件
  • 尝试降级@angular/animations版本
  • 删除package-lock.json文件和node_module目录
  • 删除缓存并尝试过

Docker文件:

FROM docker-images.artifactory.dummydomain.com/db/node:14.18-alpine as build

WORKDIR /usr/src/app
COPY . /usr/src/app
RUN npm install -g @angular/cli@15.2.8
RUN npm ci 
RUN ng build --configuration=test
USER node
COPY --chown=node:node . .
Run Code Online (Sandbox Code Playgroud)

Package.json 文件依赖项:

    "@angular/animations": "^15.2.9",
    "@angular/cdk": "^15.2.9",
    "@angular/common": "^15.2.9",
    "@angular/compiler": "^15.2.9",
    "@angular/core": "^15.2.9",
    "@angular/forms": "^15.2.9",
    "@angular/localize": "^15.2.9",
    "@angular/material": "^15.2.9",
    "@angular/material-moment-adapter": "^15.2.9",
    "@angular/platform-browser": "^15.2.9",
    "@angular/platform-browser-dynamic": "^15.2.9",
    "@angular/router": "^15.2.9",
    "angular-in-memory-web-api": "^0.9.0",
    "core-js": "^3.6.2",
    "export-from-json": "^1.7.0",
    "hammerjs": "^2.0.8",
    "material-design-icons-iconfont": "^6.7.0",
    "moment": "^2.24.0",
    "ng-uikit-pro-standard": "^1.0.0",
    "ngx-spinner": "^15.0.1",
    "rxjs": "~6.6.7",
    "socket.io-client": "^4.5.4",
    "sweetalert2": "^11.6.9",
    "tslib": "^2.0.0",
    "vkbeautify": "^0.99.3",
    "zone.js": "~0.11.4"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^15.2.8",
    "@angular/cli": "^15.2.8",
    "@angular/compiler-cli": "^15.2.9",
    "@angular/language-service": "^15.2.9",
    "@types/jasmine": "~3.6.0",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "^12.11.1",
    "codelyzer": "^6.0.0",
    "jasmine-core": "~3.8.0",
    "jasmine-spec-reporter": "~5.0.0",
    "karma": "~6.4.2",
    "karma-chrome-launcher": "~3.1.0",
    "karma-coverage-istanbul-reporter": "~3.0.2",
    "karma-jasmine": "~4.0.0",
    "karma-jasmine-html-reporter": "^1.7.0",
    "protractor": "~7.0.0",
    "ts-node": "~7.0.0",
    "tslint": "~6.1.0",
    "typescript": "~4.9.5"
  }
Run Code Online (Sandbox Code Playgroud)

如果有人可以提供帮助,那就太好了。蒂亚!

JSO*_*ulo 25

如果 npm 尝试处理它无法理解的锁定文件,则会发生此错误(错误消息根本没有帮助)。锁文件的格式随着时间的推移而变化,npm 用lockfileVersion锁文件中的参数标记当前版本:

  • 未提供版本:来自 npm v5 之前版本的 npm 的“古老”收缩包装文件。
  • 1:npm v5 和 v6 使用的锁定文件版本。
  • 2:npm v7 和 v8 使用的锁文件版本。向后兼容 v1 锁定文件。
  • 3:npm v9及以上版本使用的lockfile版本。向后兼容 npm v7。

您使用 v14.18 作为基础映像,该映像随 npm v6 一起提供。在您的系统中,您有 npm v9,因此为lockfileVersion3。正如您在上面的列表中看到的,此格式与 npm v6 不兼容。

建议的修复是将 Node 基础映像的版本更新为 v16 (npm 8) 或 v18 (npm 9)。或者,您可以使用 npm v8 执行npm install,然后提交 + 推送生成的锁定文件。

  • 很好的答案!github actions 就是这样一个谜题。 (4认同)