当前位置: 首页 > backend >正文

Joplin-解决 Node.js 中 “digital envelope routines::unsupported“ 错误

解决 Node.js 中 “digital envelope routines::unsupported” 错误

在使用 Webpack 构建 Joplin 插件时,你可能会遇到 error:0308010C:digital envelope routines::unsupported 错误。这个错误看起来很复杂,但实际上有明确的原因和解决方案。

错误原因分析

这个错误发生在 Node.js v17+ 版本中,根源是:

  • Node.js v17+ 升级到了 OpenSSL 3.0
  • OpenSSL 3.0 移除了一些不安全的加密算法(如 MD4)
  • 旧版本的 Webpack(如我们项目中使用的 4.46.0)仍在使用这些被移除的算法

当你运行 npm run dist 时,Webpack 尝试使用已被移除的加密算法,导致 Node.js 抛出此错误。

解决方案

方案 1:设置环境变量(推荐)

这是最简单快捷的解决方案,通过环境变量强制 Node.js 使用旧的加密模式:

Windows 命令提示符:

set NODE_OPTIONS=--openssl-legacy-provider
npm run dist

Windows PowerShell:

$env:NODE_OPTIONS = "--openssl-legacy-provider"
npm run dist

Linux/macOS:

export NODE_OPTIONS=--openssl-legacy-provider
npm run dist

方案 2:降级 Node.js 版本

如果希望长期使用而不设置环境变量,可以降级 Node.js 到 v16.x 或更低版本:

  1. 卸载当前的 Node.js v20.17.0
  2. 从 Node.js 官网 下载并安装 v16.x LTS 版本
  3. 重新运行 npm run dist

方案 3:升级 Webpack 及相关依赖

这是最彻底但也最复杂的解决方案:

  1. 升级 Webpack 到 5.x 版本:
npm install webpack@5 --save-dev
  1. 升级相关 loader 和插件:
npm install ts-loader@latest webpack-cli@latest --save-dev
  1. 根据需要调整 Webpack 配置文件以适应新版本的 API 变化
# 查看项目局部版本
npx webpack -v# 查看全局版本(若全局安装)
webpack -v

为什么这些方案有效?

  • 方案 1 通过 --openssl-legacy-provider 选项让 Node.js 启用旧的加密算法支持,兼容 Webpack 4 的需求
  • 方案 2 使用仍支持旧加密算法的 Node.js 版本,从根本上避免了兼容性问题
  • 方案 3 升级到支持 OpenSSL 3.0 的 Webpack 版本,彻底解决了兼容性问题

总结

对于 Joplin 插件开发这类可能依赖特定版本构建工具的场景,我推荐优先使用方案 1(设置环境变量),它既能解决问题,又不会影响项目的其他依赖和配置。

如果计划长期维护这个项目,那么方案 3(升级 Webpack)是更好的选择,可以避免未来可能出现的其他兼容性问题。

http://www.xdnf.cn/news/20292.html

相关文章:

  • 自旋锁/互斥锁 设备树 iic驱动总线 day66 67 68
  • 输入2.2V~16V 最高输出20V2.5A DCDC升压芯片MT3608L
  • 计算机网络:网络设备在OSI七层模型中的工作层次和传输协议
  • 鸿蒙 BLE 蓝牙智能设备固件升级之DFU升级方式(Nordic芯片)
  • macbook intel 打开cursor会闪退
  • MySQL集群高可用架构(MHA高可用架构)
  • Process Explorer进阶(第三章3.3):深入理解进程详情
  • [Windows] AdGuard.v7.21.5089.0 中文直装电脑版
  • cds序列转换为pepperl脚本详细解读及使用
  • Python多线程编程全面指南
  • web自动化测试
  • Elasticsearch优化从入门到精通
  • 线代:排列与逆序
  • 从机器学习的角度实现 excel 中趋势线:揭秘梯度下降过程
  • PageHelper的使用及底层原理
  • WordPress如何绑定多个域名 WordPress实现多域名访问
  • 新的打卡方式
  • GPIO介绍
  • java接口和抽象类有何区别
  • ICPC 2023 Nanjing R L 题 Elevator
  • 用Android studio运行海外极光推送engagelab安卓的SDK打apk安装包
  • Ribbon和LoadBalance-负载均衡
  • 从Java全栈到前端框架:一次真实面试的深度复盘
  • 验证平台中所有的组件应该派生自UVM中的类
  • 设计艺术~缓存结构设计
  • 【Go项目基建】GORM框架实现SQL校验拦截器(完整源码+详解)
  • C++和OpenGL实现3D游戏编程【连载30】——文字的多行显示
  • MySQL集群——主从复制进阶
  • 2025年上海市星光计划第十一届职业院校技能大赛高职组“信息安全管理与评估”赛项交换部分前6题详解(仅供参考)
  • FlashAttention:突破Transformer内存瓶颈的IO感知革命