部署代码到Ropsten报SyntaxError: Unexpected number in JSON错误如何解决
问题排查与解决
核心错误原因
- 你错误地使用
JSON.parse()解析.gitignore文件:.gitignore是Git用于配置忽略提交文件的纯文本规则文件,本身不符合JSON格式规范,所以解析时会直接抛出JSON格式异常。 - 存在潜在配置错误:Infura节点地址使用单引号包裹,无法解析模板变量
${gitignore.projectID},即使JSON解析正常后续也会出现节点连接失败问题。
修复步骤
- 项目根目录新建专门存储私密配置的JSON文件,命名为
secret.json,内容格式如下:
{ "seed": "你的12/24位钱包助记词", "projectID": "你的Infura项目ID" }
- 将
secret.json添加到.gitignore文件中,避免私密信息被提交到代码仓库,只需在.gitignore新增一行:
secret.json
- 修改Truffle配置文件代码,修正文件读取路径和模板字符串写法:
const fs = require('fs'); const HDWalletProvider = require("@truffle/hdwallet-provider"); // 读取专门的JSON配置文件,而非.gitignore const secret = JSON.parse( fs.readFileSync('./secret.json').toString().trim() ); module.exports = { networks: { ropsten: { provider: () => new HDWalletProvider( secret.seed, // 用反引号包裹模板字符串,才能正确解析变量 `https://ropsten.infura.io/v3/${secret.projectID}` ), network_id: 3 } } };
- 若需要验证解析是否正常,可在JSON解析前添加日志输出,确认读取的内容是合法JSON格式:
const fileContent = fs.readFileSync('./secret.json').toString().trim(); console.log('读取到的配置内容:', fileContent); const secret = JSON.parse(fileContent);
额外提示
Ropsten测试网已官方弃用,若修复配置后仍出现网络相关错误,可替换为当前可用的Sepolia或Goerli测试网,修改对应节点地址和network_id即可。
内容的提问来源于stack exchange,提问作者artificialselection
相关产品推荐
相关产品推荐

