使用@onflow/cadence-parser遇Failed to parse URL错误,求解决方案
解决@onflow/cadence-parser的TypeError: Failed to parse URL from cadence-parser.wasm错误
我在项目中使用@onflow/cadence-parser包时遇到了标题中的错误,按照包README提供的示例代码运行后报错:
示例代码:
import { CadenceParser } from "@onflow/cadence-parser"; (async () => { const parser = await CadenceParser.create("cadence-parser.wasm"); const ast = parser.parse(` pub contract HelloWorld { pub fun hello() { log("Hello, world!") } } `); })();
运行后抛出错误:
TypeError: Failed to parse URL from cadence-parser.wasm at Object.fetch (node:internal/deps/undici/undici:11600:11) { [cause]: TypeError [ERR_INVALID_URL]: Invalid URL }
我曾尝试将cadence-parser.wasm文件从包目录复制到项目根目录,以为是路径问题,但问题依然存在。我的Node.js版本是v20.7.0。
可行解决方案
通过Node.js的fs模块读取wasm文件的二进制内容,再传入CadenceParser.create()方法即可解决问题,代码如下:
import { CadenceParser } from "@onflow/cadence-parser"; import * as fs from "fs" (async () => { let file = fs.readFileSync('./cadence-parser.wasm'); const parser = await CadenceParser.create(file); const ast = parser.parse(` pub contract HelloWorld { pub fun hello() { log("Hello, world!") } } `); console.log({ast}) })();
原示例代码默认适配浏览器环境,通过fetch加载wasm文件;但在Node.js环境中,直接传入路径字符串会被fetch当作URL解析,导致无效URL错误。改用fs读取文件二进制内容传入,可避免URL解析、WebAssembly实例化类型不匹配等问题。
内容的提问来源于stack exchange,提问作者MaxStarka
相关产品推荐
相关产品推荐

