解决 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.修改程序运行端口 一个问题,两种解决办 ...
随机推荐
- RabbitMQ 3.7.9版本中,Create Channel超时的常见原因及排查方法
在RabbitMQ 3.7.9版本中,Create Channel超时的常见原因及排查方法如下: 常见原因 网络问题: 网络延迟或不稳定可能导致通信超时. 网络分区(network partition ...
- lumen、laravel 环境问题汇总
框架报500 1.chmod 777 -R storage 将日志目录权限设置下. 2.修改fastcgi,将代码目录包含进去. fastcgi_param PHP_ADMIN_VALUE " ...
- Windows服务器安全检查
为降低windows服务器系统的脆弱性,除了补丁及时更新,还建议加强系统账号的管理. 1.精简系统登录账号,最小化登录权限 检查方法:开始->运行->compmgmt.msc(计算机管理) ...
- ISCTF2023
ISCTF 2023 Misc 签到题 公众号发送:小蓝鲨,我想打ctf ISCTF{W3lcom3_7O_2023ISCTF&BlueShark} 你说爱我?尊嘟假嘟 你说爱我替换.,真嘟替 ...
- Linux 更新网络时间
下载包 yum install -y ntpdate 同步网络时间 ntpdate 0.asia.pool.ntp.org 若上面的时间服务器不可用,也可以改用如下服务器进行同步: time.nist ...
- mac idea 设置类注解说明
类注解 打开file->setting->Editor->File and Code Templates->Includes->File Header #if (${PA ...
- 「悬浮捷径SoftCircle」安卓平台的hao123,一键打开万物
罗老师的onestep一步发布之前, 终端的打开形式还拘泥于桌面和负一屏 这种方式够简洁,但缺点明显: 1.入口单一性:只能在app首页和各种扫一扫之间选择和切换 2.操作复杂:入口切换需要频繁的进入 ...
- 全网最适合入门的面向对象编程教程:12 类和对象的Python实现-Python使用logging模块输出程序运行日志
全网最适合入门的面向对象编程教程:12 类和对象的 Python 实现-Python 使用 logging 模块输出程序运行日志 摘要: 本文主要介绍了日志的定义和作用,以及 Python 内置日志处 ...
- django 设置外键的时候,related_name的值大写还是小写,规则怎样
django 设置外键的时候,related_name的值大写还是小写,规则怎样 在Django中,related_name参数用于定义反向关系的名称,即通过外键字段反向查询关联模型的对象.relat ...
- [oeasy]python0013_ASCII码表_英文字符编码_键盘字符
ASCII 码表 回忆上次内容 ord(c)和chr(i) 这是俩函数 这俩函数是一对,相反相成的⚖️ ord 通过 字符 找到对应的 数字 chr 通 ...