React项目引入ipfs-http-client出现Module parse failed报错如何解决
报错根因
你使用的ipfs-http-client新版源码使用了ES6+的对象剩余扩展运算符语法,而Create React App(CRA)默认的编译配置不会对node_modules目录下的依赖做语法转译,低版本webpack无法识别这类新语法,就会抛出解析失败的报错。
解决方案
方案一:降级依赖(新手推荐,无额外配置)
新版ipfs-http-client对运行环境要求较高,直接降级到兼容旧版CRA的版本即可,执行以下命令重新安装依赖:
npm install ipfs-http-client@33.1.1
安装完成后重新执行编译命令即可解决报错。
方案二:修改CRA编译配置(需保留新版ipfs-http-client时使用)
如果需要使用新版IPFS客户端的功能,可以通过修改CRA的默认配置,让babel转译指定的node_modules依赖:
- 安装配置修改工具和babel语法插件:
npm install react-app-rewired customize-cra @babel/plugin-proposal-object-rest-spread --save-dev
- 在项目根目录新建
config-overrides.js文件,写入以下内容:
const { override, addBabelPlugins, babelInclude } = require('customize-cra'); const path = require('path'); module.exports = override( // 指定需要babel转译的目录 babelInclude([ path.resolve('src'), path.resolve('node_modules/ipfs-http-client'), path.resolve('node_modules/ipfs-unixfs') ]), // 新增对象扩展语法解析插件 addBabelPlugins('@babel/plugin-proposal-object-rest-spread') );
- 打开
package.json,修改scripts字段,把所有react-scripts的启动命令替换为react-app-rewired:
{ "scripts": { "start": "react-app-rewired start", "build": "react-app-rewired build", "test": "react-app-rewired test", "eject": "react-scripts eject" } }
- 重新执行
npm start启动项目即可。
其他注意事项
你修改为Ropsten测试网部署的逻辑没有问题,REMIX选择Injected Web3时确保你的MetaMask钱包已经提前切换到Ropsten测试网,避免部署到错误的链上。
内容的提问来源于stack exchange,提问作者IAmACoder
相关产品推荐
相关产品推荐

