旧Node项目npm依赖安装报错求助:版本不兼容问题
老旧项目Node版本不兼容问题的解决办法
问题背景
本地Node版本为16.x,但项目要求使用14.x版本,执行npm install或npm start时频繁出现依赖错误,npm update无法解决核心的版本兼容问题。
npm install 日志
0 verbose cli C:\Program Files\nodejs\node.exe C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js 1 info using npm@8.15.0 2 info using node@v16.17.1 3 timing npm:load:whichnode Completed in 1ms 4 timing config:load:defaults Completed in 2ms 5 timing config:load:file:C:\Program Files\nodejs\node_modules\npm\npmrc Completed in 3ms 6 timing config:load:builtin Completed in 3ms 7 timing config:load:cli Completed in 2ms 8 timing config:load:env Completed in 1ms 9 timing config:load:file:D:\FYP\Project Frontend\fyp\.npmrc Completed in 0ms 10 timing config:load:project Completed in 2ms 11 timing config:load:file:C:\Users\Administrator\.npmrc Completed in 0ms 12 timing config:load:user Completed in 1ms 13 timing config:load:file:C:\Users\Administrator\AppData\Roaming\npm\etc\npmrc Completed in 0ms 14 timing config:load:global Completed in 0ms 15 timing config:load:validate Completed in 0ms 16 timing config:load:credentials Completed in 2ms 17 timing config:load:setEnvs Completed in 1ms 18 timing config:load Completed in 14ms 19 timing npm:load:configload Completed in 14ms 20 timing npm:load:mkdirpcache Completed in 1ms 21 timing npm:load:mkdirplogs Completed in 1ms 22 verbose title npm install 23 verbose argv "install" 24 timing npm:load:setTitle Completed in 2ms 25 timing config:load:flatten Completed in 4ms 26 timing npm:load:display Completed in 6ms 27 verbose logfile logs-max:10 dir:C:\Users\Administrator\AppData\Local\npm-cache\_logs 28 verbose logfile C:\Users\Administrator\AppData\Local\npm-cache\_logs\2022-10-12T16_19_59_564Z-debug-0.log 29 timing npm:load:logFile Completed in 11ms 30 timing npm:load:timers Completed in 0ms 31 timing npm:load:configScope Completed in 0ms 32 timing npm:load Completed in 36ms 33 timing arborist:ctor Completed in 1ms 34 silly logfile start cleaning logs, removing 2 files 35 silly logfile done cleaning log files 36 timing idealTree:init Completed in 1762ms 37 warn old lockfile 37 warn old lockfile The package-lock.json file was created with an old version of npm, 37 warn old lockfile so supplemental metadata must be fetched from the registry. 37 warn old lockfile 37 warn old lockfile This is a one-time fix-up, please be patient... 37 warn old lockfile
报错信息(中文翻译)
npm WARN old lockfile npm WARN old lockfile package-lock.json 文件由旧版本的npm创建, npm WARN old lockfile 因此需要从注册表获取补充元数据。 npm WARN old lockfile npm WARN old lockfile 这是一次性修复,请耐心等待... npm WARN old lockfile npm WARN EBADENGINE 不支持的引擎 { npm WARN EBADENGINE package: undefined, npm WARN EBADENGINE required: { node: '14.x' }, npm WARN EBADENGINE current: { node: 'v16.17.1', npm: '8.15.0' } npm WARN EBADENGINE } npm WARN deprecated @types/classnames@2.3.1: 这是存根类型定义,classnames已自带类型定义,无需安装此包。 npm WARN deprecated source-map-url@0.4.1: 该包已废弃 npm WARN deprecated stable@0.1.8: 现代JS已保证Array#sort()是稳定排序,此库已废弃。 npm WARN deprecated flatten@1.0.3: flatten已废弃,建议使用lodash等工具库替代。 npm WARN deprecated request-promise-native@1.0.9: request-promise-native已废弃,因其依赖的request包已废弃。 npm WARN deprecated @hapi/bourne@1.3.2: 该版本已废弃,不再支持和维护。 npm WARN deprecated @hapi/topo@3.1.6: 该版本已废弃,不再支持和维护。 npm WARN deprecated urix@0.1.0: 该包已废弃 npm WARN deprecated har-validator@5.1.5: 此库不再支持。 npm WARN deprecated hoek@4.2.1: 该版本已废弃,建议升级到最新版本以获得功能、修复和安全补丁。若无法升级,可购买旧版本商业支持。 npm WARN deprecated source-map-resolve@0.5.3: 该包已废弃 npm WARN deprecated chokidar@2.1.8: Chokidar 2自2019年起不再接收安全更新,建议升级到Chokidar 3,依赖减少15倍。 npm WARN deprecated chokidar@2.1.8: Chokidar 2自2019年起不再接收安全更新,建议升级到Chokidar 3,依赖减少15倍。 npm WARN deprecated mini-create-react-context@0.4.1: 包不再支持,如需帮助请联系支持团队。 npm WARN deprecated resolve-url@0.2.1: 该包已废弃 npm WARN deprecated left-pad@1.3.0: 请使用String.prototype.padStart()替代。 npm WARN deprecated redux-devtools-extension@2.13.9: 包已迁移到@redux-devtools/extension。 npm WARN deprecated sane@4.1.0: 已修复部分依赖漏洞,不再支持node < 10,添加了新的ECMAScript语法/特性。 npm WARN deprecated eslint-loader@3.0.3: 此loader已废弃,请使用eslint-webpack-plugin替代。 npm WARN deprecated @hapi/address@2.1.4: 已迁移到'npm install @sideway/address'。 npm WARN deprecated html-webpack-plugin@4.0.0-beta.11: 请切换到稳定版本。 npm WARN deprecated querystring@0.2.0: querystring API被视为遗留API,新代码应使用URLSearchParams API替代。 npm WARN deprecated babel-eslint@10.1.0: babel-eslint现在更名为@babel/eslint-parser,此包不再接收更新。
可行运行方案
1. 使用Node版本管理器切换到14.x(推荐)
- nvm(跨平台通用)
- 安装nvm后,执行命令切换版本:
nvm install 14 nvm use 14 - 删除项目目录下的
node_modules文件夹和package-lock.json文件,重新执行npm install。
- 安装nvm后,执行命令切换版本:
- nvm-windows(仅Windows)
操作逻辑和nvm一致,安装后执行相同命令即可切换到Node14.x版本。
2. 忽略引擎检查(临时方案,不推荐)
如果暂时无法切换Node版本,可强制忽略引擎限制完成安装:
npm install --ignore-scripts
或者在项目根目录的.npmrc文件中添加配置:
engine-strict=false
此方法可能导致后续项目运行报错,仅适合临时测试使用。
3. 升级项目依赖(工作量较大)
若有足够时间和精力,可逐步升级项目中废弃的依赖到兼容Node16.x的版本,同时更新package.json中的engines字段为node: '16.x'。但老旧项目可能存在依赖连锁问题,需谨慎测试。
内容的提问来源于stack exchange,提问作者Daniyal
相关产品推荐
相关产品推荐

