解决 Rust WebAssembly 启动 Web 程序报错
当你艰难入门 Rust ,并满怀斗志准备投身 WebAssembly,第一课也许会先给你泼盆凉水。
跟随 《Rust 和 WebAssembly》 文档的指引,一路 install、coding、build,终于来到 Web 的启动:
npm run start
然而,现在是 2024 年,你电脑上 Node 版本已经 >= 18,结果就是,你收到了报错:
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:67:19)
at Object.createHash (node:crypto:130:10)
at module.exports
...
opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'
报错的原因: 你电脑上 Node 版本为 17+(使用 OpenSSL 3.0),但 node_modules 中模块的算法已经不受 OpenSSL 3.0 支持。
解决的办法:
- 降级
Node版本 Node启用OpenSSL 3.0旧版提供程序Webpack升级到5.54.0+
一个个来看:
1. 降级 Node 版本
如果你已经安装了 Node 版本管理器 NVM,很方便就可以切换到 v16 版本,否则可以先去安装 NVM (国内源)。
# 如果你还没安装过
nvm install v16.20.2
# 切换到 16 版本
nvm use 16
2. Node 启用 OpenSSL 3.0 旧版提供程序
需要使用 openssl-legacy-provider 标识 (Node17 新增,参见文档:https://nodejs.cn/api-v18/cli/openssl_legacy_provider.html )告诉 Node,我们不想使用更严格的算法和密钥大小限制。
在 Mac/Linux 上,可以直接执行:
NODE_OPTIONS='--openssl-legacy-provider' npm run start
或修改一下 package.json:
"scripts": {
"start": "export NODE_OPTIONS=--openssl-legacy-provider && npm run start",
...
}
另一种方式是在 ~/.zsrch、~/.bashrc 中添加一句:
export NODE_OPTIONS=--openssl-legacy-provider
如果是 Windows,则按以下方式设置环境变量:
set NODE_OPTIONS=--openssl-legacy-provider
3. Webpack 升级到 5.54.0+
Webpack v5.54.0+,它带有一个不依赖 OpenSSL 的哈希算法。
咱们这里干脆全升级到最新版本:
npm install --force webpack@latest webpack-cli@latest webpack-dev-server@latest copy-webpack-plugin@latest
然后修改一下 webpack.config.js:
module.exports = {
...
plugins: [
// copy-webpack-plugin 入参改成这样:
new CopyWebpackPlugin({
patterns: [
{ from: "index.html" },
]
})
],
// 添加下面这段,支持 WebAssembly 打包
experiments: {
asyncWebAssembly: true,
syncWebAssembly: true
},
};
好了,再次启动工程试试!
解决 Rust WebAssembly 启动 Web 程序报错的更多相关文章
- Abnormal build process termination--解决IDEA启动web项目报错
iDEA启动后报Error:Abnormal build process terminatio 报错的原因如下: Error:Abnormal build process termination: & ...
- 启动web项目报错:The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone.
解决: 在application.properties配置文件中的添加标红部分 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/miaosha?se ...
- 解决HDFS无法启动namenode,报错Premature EOF from inputStream;Failed to load FSImage file, see error(s) above for more info
一.情况描述 启动hadoop后发现无法打开hdfs web界面,50070打不开,于是jps发现少了一个namenode: 查看日志信息,发现如下报错: 2022-01-03 23:54:10,99 ...
- Web程序报错:Error instantiating servlet
---恢复内容开始--- web程序的前期准备工作都做好了,也就是web程序的目录都建好了,在WEB-INF文件夹下建立了classes文件夹,用于存放编好的.class文件.我想这两个类应该都在相应 ...
- 启动node程序报错:event.js:183 throw er; // unhandled 'error' event
启动node程序时,报如下错误:
- 【Python】解决使用pyinstaller打包Tkinker程序报错问题
问题描述 使用pyinstaller打包使用Tkinter编写的控制台程序,出现报错 15793 INFO: Adding Microsoft.Windows.Common-Controls to d ...
- 【待解决】创建maven web工程报错
报错信息如下: Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 o ...
- 【待解决】maven创建web项目报错
创建web项目时报错
- 启动android程序报错
提示错误如下: The connection to adb is down, and a severe error has occured. [2010-03-11 09:36:56 - HelloO ...
- WEB程序报错Address localhost:1099 is already in use的解决方案(网络端口被占用导致程序无法运行)
首先,这是说明你的本地端口1099已经被占用了,解决的方法有两个: 1.停止本地占用端口 打开cmd 按如下指令进行命令输入,就能找出占用端口的进程并停止啦 2.修改程序运行端口 一个问题,两种解决办 ...
随机推荐
- Android 各层架构
Android应用框架层和硬件抽象层以及底层之间的关系 1. JNI技术: (1).JNI技术简单的说就是在本地Java语言声明本地方法和加载动态链接库(.so文件) (2).动态链接库(.so文件) ...
- 基于SQLite3的C学习总结
背景 针对 SQLite3 的学习总结 arm linux 移植 SQLite 3 如何在 Linux 上移植使用 SQLite3,标题虽然是在讲 arm linux,但实际上是跨平台的. 基于 SQ ...
- 嵌入式ARM端测试手册——全志T3+Logos FPGA开发板(上)
前 言 本指导文档适用开发环境: Windows开发环境:Windows 7 64bit.Windows 10 64bit Linux开发环境:Ubuntu18.04.4 64bit 虚拟机:VMwa ...
- 使用bootstrap-select 动态加载数据不显示的问题,级联数据置为空
动态加载数据 $.showLoading('数据加载中');//开启遮挡层 $.ajax({ url: "/PickoutStock/GetSendReceive", data: ...
- 2 手机号登录时,调的不是login接口,而是注册的一个接口
手机号登录时,调的不是login接口,而是注册的一个接口
- MViT:性能杠杠的多尺度ViT | ICCV 2021
论文提出了多尺度视觉Transformer模型MViT,将多尺度层级特征的基本概念与Transformer模型联系起来,在逐层扩展特征复杂度同时降低特征的分辨率.在视频识别和图像分类的任务中,MViT ...
- VUE小知识~作用域插槽
作用域插槽可以为我们向组件内插入特定的标签,方便修改维护. 组件内需要使用 <slot></slot>进行插槽站位. 组件标签内需要使用<template > &l ...
- odoo Actions学习总结
环境 odoo-14.0.post20221212.tar Actions(动作) action定义系统响应用户操作的行为:登录.操作按钮.选择发票等- action可以存储在数据库中,也可以作为字典 ...
- odoo 为form表单视图添加chatter功能
实践环境 Odoo 14.0-20221212 (Community Edition) 需求描述 如图,给表单新增一个类似聊天的窗口,当记录一些表单活动(本例为自动记录当前记录状态变化) 需求实现 模 ...
- JMeter 逻辑控制之IF条件控制器
逻辑控制之IF条件控制器 测试环境 JMeter-5.4.1 循环控制器介绍 添加While Controller 右键线程组->添加->逻辑控制器->While控制器 控制器面板介 ...