news 2026/7/10 1:07:16

FSReqCallback.readFileAfterClose [as oncomplete] (node:internal/fs/read_file_context:68:3) { open

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FSReqCallback.readFileAfterClose [as oncomplete] (node:internal/fs/read_file_context:68:3) { open

报错信息:FSReqCallback.readFileAfterClose [as oncomplete] (node:internal/fs/read_file_context:68:3) {
opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'

错误核心原因

该报错是Node.js 版本过高(v17+)与 OpenSSL 3.0 兼容性问题:Node.js v17 及以上版本将 OpenSSL 升级到 3.0,废弃了 MD5、SHA1 等旧加密算法,而若依前端(ruoyi-ui)依赖的 Webpack/Vue-CLI 等构建工具仍使用这些算法,导致加密初始化失败(digital envelope routines::initialization error)。

二、若依前端(ruoyi-ui)针对性解决方法

方法 1:临时解决(快速生效,无需改 Node 版本)

通过添加环境变量兼容旧加密算法,修改若依前端的启动 / 打包脚本,适配不同系统:

步骤 1:定位若依前端脚本文件

打开ruoyi-ui/package.json,找到scripts节点(包含dev/build:prod等脚本):

json

"scripts": { "dev": "vue-cli-service serve", "build:prod": "vue-cli-service build", "lint": "eslint --ext .js,.vue src" }
步骤 2:修改脚本(按系统适配)
  • Windows 系统(cmd/powershell):在脚本前添加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", "lint": "eslint --ext .js,.vue src" }
  • Linux/macOS 系统:在脚本前添加export NODE_OPTIONS=--openssl-legacy-provider &&

    "scripts": { "dev": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve", "build:prod": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build", "lint": "eslint --ext .js,.vue src" }
步骤 3:重启前端服务

删除ruoyi-ui/node_modules/.cache缓存文件夹,重新执行:

bash

运行

npm run dev

此时前端可正常启动,无加密算法报错。

方法 2:永久解决(推荐,适配 Node LTS 版本)

降级 Node.js 到v16.x(LTS 长期支持版)(若依前端对该版本兼容性最佳):

  1. 卸载当前高版本 Node.js(如 v17/v18/v19);
  2. 下载 Node.js v16.x 安装包:官网地址:https://nodejs.org/dist/latest-v16.x/(选择对应系统版本);
  3. 安装后验证版本:
    node -v # 显示 v16.xx.xx 即为成功
  4. 重新安装若依前端依赖(可选):
    cd ruoyi-ui rm -rf node_modules package-lock.json # 清空旧依赖 npm install # 重新安装依赖 npm run dev # 启动前端,无需修改脚本
方法 3:补充(若用 nvm 管理 Node 版本,更便捷)

若安装了 nvm(Node 版本管理器),可一键切换版本:

# 安装v16.20.2(最新LTS) nvm install 16.20.2 # 切换到v16版本 nvm use 16.20.2 # 验证版本 node -v

三、关键注意事项

  1. 若依前端的node-sass依赖对 Node 版本敏感,v16.x 可完美兼容node-sass@4.14.x(若依默认版本);
  2. 避免使用 Node.js v17+ 运行若依前端,除非全部依赖升级到支持 OpenSSL 3.0 的版本(成本高,不推荐);
  3. 修改package.json脚本后,若仍报错,需清空node_modulespackage-lock.json重新安装依赖。

四、验证效果

修改后执行npm run dev,若终端显示:

App running at: - Local: http://localhost:80/index.html - Network: http://192.168.x.x:80/index.html

且无ERR_OSSL_EVP_UNSUPPORTED报错,说明解决成功。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/8 11:29:37

数智化不动产登记与地籍信息化建设方案

随着数字中国战略的深入推进,不动产登记和地籍管理领域正迎来一场深刻的数智化变革。通过融合大数据、人工智能、区块链等前沿技术,传统不动产登记模式正在向智能化、高效化、透明化转型,为优化营商环境、提升政府服务效能提供有力支撑。一、…

作者头像 李华
网站建设 2026/7/9 9:30:14

【办公类-39-07】20251217通义万相动物图(万相2.6 数字人-对口型)

背景需求 20251217,给了免费的150分,给我们做功能测试,日后不一定有这么多,我先把昨天的30分用掉 插入图片 插入音频 只能15秒 删减文字 图片音频30分,15秒 即使支付30分,生成也要10分钟 生成失败&#xf…

作者头像 李华
网站建设 2026/7/9 11:18:08

cursor-free-vip终极指南:一键突破AI工具限制的完整方案

cursor-free-vip终极指南:一键突破AI工具限制的完整方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your t…

作者头像 李华
网站建设 2026/7/9 18:29:35

MTK设备启动保护机制绕过实用教程:高效解锁工具深度解析

MTK-bypass/bypass_utility是一款专为MediaTek芯片设备设计的开源解锁工具,能够有效禁用设备启动时的启动保护机制。通过这款工具,用户可以为后续的系统调试、刷机操作和开发工作提供便利。 【免费下载链接】bypass_utility 项目地址: https://gitcod…

作者头像 李华
网站建设 2026/7/9 9:03:21

20、毫米波(mmWave)介质访问控制综述

毫米波(mmWave)介质访问控制综述 1. 引言 在无线和计算网络中,介质访问控制(MAC)的基本作用之一是“冲突和干扰管理”。像载波侦听多址接入/冲突避免(CSMA/CA)就是无线网络中著名且成功的随机接入方案,它通过避免冲突的概念来协调无线介质访问。 然而,在毫米波(mm…

作者头像 李华
网站建设 2026/7/6 15:59:18

42、LINQ查询表达式与.NET集合类型详解

LINQ查询表达式与.NET集合类型详解 1. 查询表达式介绍 查询表达式是一种强大的工具,它为开发者提供了一种类似于SQL的语法来处理集合数据。在查询表达式中, select 子句可以定义匿名类型。例如,它可以将 IGrouping<TKey, TElement>.Key 重命名为 IsContextualK…

作者头像 李华