Node23硬刚Node14老旧项目,泰锐Trae狂上分

174 阅读2分钟

2025年3月, Node.js V14.X发布 2025年3月, Node.js V23.X 2025年4月,现代的剑斩狂砍陈旧的藤,俺偏要用Node.js v23运行

Q1、项目npm run dev启动报错

图片.png

//Error: error:0308010C:digital envelope routines::unsupported
  opensslErrorStack: [
    'error:03000086:digital envelope routines::initialization error',
    'error:0308010C:digital envelope routines::unsupported'
  ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'

报错:digital envelope routines::unsupported

Tate解决: Node.js版本过高导致的OpenSSL兼容性问题。您使用的是Node.js v23.7.0,而项目中的依赖更适合较旧的Node.js版本。Node.js v23默认使用的OpenSSL 3.0 Apply 修改package.json文件,配置这两句 增加 set NODE_OPTIONS=--openssl-legacy-provider --&& 为:

  "scripts": {
    "dev": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
    "build:prod": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build",
    "build:stage": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build --mode staging",
    // ... 其他脚本保持不变 ...
  },

只用修改这个一个配置,现在网站可以正常运行。 图片.png

图片.png

Q2、util._extend API 废弃 ,使用Object.assign

图片.png

我们注意到这里有一句话DeprecationWarning: The util._extend API is deprecated. Please use Object.assign() instead.

Trae AI:这个警告是由于项目中某些依赖使用了Node.js中已废弃的 util._extend API导致的。同时给出三种解决方案:

1) 最佳解决方案

图片.png

2) 临时解决方案

图片.png

3) 长期建议

考虑将项目升级到Vue 3生态系统,因为:

  1. Vue 2已停止维护
  2. 新版依赖都使用现代API
  3. 能获得更好的性能和功能支持 建议先尝试方案1,这是最彻底的解决方法。如果遇到兼容性问题,再使用方案2临时解决。

4) 问题复现

图片.png

使用 node --trace-deprecation 来定位具体的废弃API警告来源,可以修改package.json中的scripts部分:

图片.png

Q3、Syntax Error: Error: Node Sass 不支持你的系统环境

Tare AI:因为你使用的 node-sass 已经过时且不支持当前的Node.js环境。 图片.png

刚好有个掘友 的吐槽 《关于vue项目中的臭恶 node-sass 安装报错问题解决》

图片.png

用AI给的两句话,还是不行,暂时没辙,使用了安装过旧版本的node_modules过渡。

图片.png

总结

实测老旧项目是可以Node.js用新版本运行的,遇见具体错误各个击破,兵来将挡水来土掩,尽可能不做技术自我降级是我们最后的底线。技术需要追求更高、更快、更强。新质生产力,首先从新技术的探索开始,不服就干生命在于折腾。

图片.png