You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

浏览器端JS获取Alcor数据报Failed to resolve module specifier错误

问题描述

我是JavaScript初学者,希望通过JS获取WAX游戏加密货币公链上Alcor交易所的数据,参考官网提供的示例代码编写逻辑时遇到了问题。
官网明确标注以下代码未经过测试,仅作解释说明用途,给出的基础初始化代码如下:

import fetch from 'node-fetch'
import { Api, JsonRpc, RpcError } from 'eosjs'

const rpc = new JsonRpc('https://wax.greymass.com', { fetch })

从链上表格获取买盘订单簿的代码段如下:

// Get buy orderbook from table
const { rows } = await rpc.get_table_rows({
  code: 'alcordexmain',
  table: 'buyorder',
  limit: 1000,
  scope: 29, // Market id from /api/markets
  key_type: 'i128', // we are using it for getting order sorted by price.
  index_position: 2
})

遇到的具体问题:

  • 最初因JSHint版本问题出现校验异常,已将JSHint升级至版本9,但代码中await关键字仍被标红,提示需要在其后添加分号,添加分号后又触发了大量新的校验错误。
  • 目前项目可在浏览器中打开,但无法正常获取数据,浏览器控制台抛出如下错误:

Uncaught TypeError: Failed to resolve module specifier "node-fetch". Relative references must start with either "/", "./", or "../".

  • 已查阅过该报错的相关解决帖子,但所有方案均提到需要修改JSON配置文件,当前项目仅包含index.html和对应的JS文件,没有相关配置文件,不清楚解决路径。
问题根因与解决方法

根因

官网给出的示例是Node.js服务端环境的代码,不能直接在无打包工具的纯浏览器静态页面环境下运行:

  • node-fetch是Node.js端的第三方fetch实现包,浏览器本身自带全局原生fetchAPI,不需要额外导入该包,直接写import fetch from 'node-fetch'会触发模块解析错误。
  • 纯静态页面没有npm依赖安装、构建打包的流程,不能直接用import语法导入npm安装的eosjs包。
  • 顶层await仅在ES模块环境下支持,普通脚本里直接写await会触发语法校验错误、运行错误。

具体修改步骤

  1. 删掉import fetch from 'node-fetch'这行代码,浏览器环境下fetch是全局内置API,可直接调用。
  2. 不要用npm导入的方式引入eosjs,直接下载eosjs的浏览器兼容构建版本到你的本地项目目录,在index.html中用相对路径引入即可,示例引入写法:
    <script src="./eosjs-api.min.js"></script>
    
  3. 调整eosjs初始化逻辑,本地脚本引入后eosjs相关对象会挂载到全局,不需要写import语句,初始化代码改为:
    const { JsonRpc } = eosjs;
    const rpc = new JsonRpc('https://wax.greymass.com', { fetch });
    
  4. 修复await的语法问题:把所有调用rpc异步方法的逻辑包裹在async立即执行函数中,避免顶层await的语法报错:
    (async () => {
      const { rows } = await rpc.get_table_rows({
        code: 'alcordexmain',
        table: 'buyorder',
        limit: 1000,
        scope: 29,
        key_type: 'i128',
        index_position: 2
      })
      // 在这里处理返回的订单簿数据
      console.log(rows)
    })()
    
  5. 修复JSHint校验报错:在JS文件最顶部加一行配置注释,开启高版本ES语法支持,就不会乱报await相关的错误,也不需要随意添加分号:
    // jshint esversion: 11
    

内容的提问来源于stack exchange,提问作者ArtemProVR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 16:54:21