You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular项目升级至18版本时npm install执行失败求助

Angular 18升级时lmdb node-gyp编译错误的解决思路

问题背景

项目package.json内容如下:

{"name": "enhanced-kendo-grid",
  "version": "1.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "watch": "ng build --watch --configuration development",
    "test": "ng test"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "^18.2.13",
    "@angular/common": "^18.2.13",
    "@angular/compiler": "^18.2.13",
    "@angular/core": "^18.2.13",
    "@angular/forms": "^18.2.13",
    "@angular/localize": "^18.2.13",
    "@angular/platform-browser": "^18.2.13",
    "@angular/platform-browser-dynamic": "^18.2.13",
    "@angular/router": "^18.2.13",
    "@progress/kendo-angular-buttons": "^16.1.0",
    "@progress/kendo-angular-common": "^16.1.0",
    "@progress/kendo-angular-dateinputs": "^16.1.0",
    "@progress/kendo-angular-dialog": "^16.1.0",
    "@progress/kendo-angular-dropdowns": "^16.1.0",
    "@progress/kendo-angular-excel-export": "^16.1.0",
    "@progress/kendo-angular-grid": "^16.1.0",
    "@progress/kendo-angular-icons": "^16.1.0",
    "@progress/kendo-angular-inputs": "^16.1.0",
    "@progress/kendo-angular-intl": "^16.1.0",
    "@progress/kendo-angular-l10n": "^16.1.0",
    "@progress/kendo-angular-label": "^16.1.0",
    "@progress/kendo-angular-layout": "^16.1.0",
    "@progress/kendo-angular-pdf-export": "^16.1.0",
    "@progress/kendo-angular-popup": "^16.1.0",
    "@progress/kendo-angular-progressbar": "^16.1.0",
    "@progress/kendo-angular-treeview": "^16.1.0",
    "@progress/kendo-angular-utils": "^16.1.0",
    "jquery": "^3.7.1",
    "rxjs": "~7.8.0",
    "tslib": "^2.3.0",
    "zone.js": "~0.14.10"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^18.2.15",
    "@angular/cli": "^18.2.15",
    "@angular/compiler-cli": "^18.2.13",
    "@types/jasmine": "~4.3.0",
    "@types/jquery": "^3.5.30",
    "jasmine-core": "~4.6.0",
    "karma": "~6.4.0",
    "karma-chrome-launcher": "~3.2.0",
    "karma-coverage": "~2.2.0",
    "karma-jasmine": "~5.1.0",
    "karma-jasmine-html-reporter": "~2.1.0",
    "ng-packagr": "^18.2.1",
    "typescript": "~5.4.5"
  }
}

从Angular 16升级到17过程正常,但升级到18时出现以下错误:

npm error code 1
npm error path C:\xxxx\Devs\enhanced-kendo-grid\node_modules\lmdb
npm error command failed
npm error command C:\WINDOWS\system32\cmd.exe /d /s /c node-gyp-build-optional-packages

已尝试的方案:

  • 全局安装node-gyp和node-gyp-build-optional-packages
  • 删除node_modules文件夹
  • 清理npm缓存
  • 卸载并重新安装Node.js
  • 执行npm install --no-optional

以下是额外的解决思路:

可行解决方向

  • 校验Node.js版本兼容性
    Angular 18要求Node.js 18.19+、20.9+或22.x版本,用node -v查看当前版本,若不符合,切换到指定版本(推荐用版本管理工具管理多版本Node.js)。

  • 安装Windows编译依赖
    Windows下编译原生模块需要Visual C++构建工具和Python 3.x:

    1. 管理员权限打开PowerShell,执行npm install --global windows-build-tools
    2. 手动安装Python 3.10+并添加到系统PATH,再执行npm config set python python3
  • 锁定或排除lmdb依赖
    执行npm ls lmdb查看依赖树,定位引入lmdb的包。如果是间接依赖导致的,可在package.json中添加resolutions字段强制指定兼容版本(仅npm 8+支持):

"resolutions": {
  "lmdb": "2.9.2"
}

之后重新执行npm install。若该依赖非必需,也可尝试移除引入它的包。

  • 替换包管理器
    用pnpm替代npm,其依赖处理机制可能规避编译问题:

    1. 全局安装pnpm:npm install -g pnpm
    2. 删除node_modules和package-lock.json
    3. 执行pnpm install
  • 升级Kendo UI组件版本
    当前Kendo UI版本16.1.0不兼容Angular 18,需将所有@progress/kendo-angular-*包升级到17.x及以上兼容版本,再重新安装依赖。

  • 手动编译lmdb模块
    进入lmdb目录:cd node_modules/lmdb,依次执行node-gyp configure和node-gyp build,查看详细错误信息后针对性解决(如缺失库、配置问题等)。


内容的提问来源于stack exchange,提问作者derstauner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:26:02