Near Protocol合约构建报TS6054错误 已配resolveJsonModule仍找不到JSON文件
问题根本原因
你当前使用的是Near Protocol的AssemblyScript(AS)合约开发栈,并非标准TypeScript运行环境,常规TypeScript配置项resolveJsonModule仅对标准TS编译器生效,对AS的编译流程无效。AS默认不支持直接导入JSON格式文件,编译时会自动为引入路径追加.ts后缀查找文件,因此触发了xxx.json.ts不存在的TS6054错误。
可行解决办法
方案1:JSON转TS常量文件(优先推荐,无兼容问题)
直接将你的sensor_data.json内容迁移到新建的sensor_data.ts文件中,以TS常量形式导出:// sensor_data.ts 内容 export const data = { // 此处粘贴你原sensor_data.json的全部内容即可 }之后将原导入语句替换为:
import { data } from '../../contract/assembly/sensor_data';原有业务逻辑无需任何修改即可正常运行。
方案2:保留JSON文件,添加AS的JSON导入支持
安装AssemblyScript的JSON加载工具as-json-loader,然后修改项目根目录的asconfig.json(注意不是tsconfig.json,AS编译读取的是asconfig配置),在compilerOptions中添加编译参数--transform as-json-loader即可支持JSON文件直接导入。注意该方案需要匹配你当前使用的near-sdk-as版本,版本不兼容时会触发其他编译错误。方案3:排查路径匹配问题
你代码中写的导入路径为../../contract/assembly/sensor_data.json,报错提示的查找路径为../contract/assembly/sensor_data.json.ts,二者路径层级不一致,可确认当前写导入语句的文件与JSON文件的相对路径是否正确,同时检查文件名、目录名的大小写是否完全匹配,AS的路径校验对大小写敏感。
额外注意
你的代码末尾有语法笔误:
// 原错误写法 export let DHT11Registry = new PersistentUnordered Map<string, DHT11>("d"); // 需要合并为一行,避免后续编译报错 export let DHT11Registry = new PersistentUnorderedMap<string, DHT11>("d");
内容的提问来源于stack exchange,提问作者EbanCuMo

