Orbit-db createInstance报错:Path must be a string问题求助
解决OrbitDB创建实例时的"Path must be a string"错误
问题详情
IPFS初始化完成后,执行const orbitdb = await OrbitDB.createInstance(ipfs);时抛出以下错误:
Uncaught (in promise) TypeError: Path must be a string. Received "12D3KooWByXmww9fsJv46RddyFk4PJDfiuAY315MHQb9jAtyTBfW" at assertPath (index.js:29:1) at Object.join (index.js:186:1) at OrbitDB.createInstance (OrbitDB.js:109:1) at async App.js:27:1
当前使用依赖版本:
- orbit-db: 0.28.6
- ipfs: 0.63.5
Webpack 5配置文件config-overrides.js内容如下:
const webpack = require('webpack'); module.exports = function override(config) { const fallback = config.resolve.fallback || {}; Object.assign(fallback, { "crypto": require.resolve("crypto-browserify"), "stream": require.resolve("stream-browserify"), "assert": require.resolve("assert"), "http": require.resolve("stream-http"), "https": require.resolve("https-browserify"), "os": require.resolve("os-browserify"), "url": require.resolve("url"), "path": require.resolve("path-browserify") }) config.resolve.fallback = fallback; config.plugins = (config.plugins || []).concat([ new webpack.ProvidePlugin({ process: 'process/browser', Buffer: ['buffer', 'Buffer'] }) ]) return config; }
解决方案
1. 显式指定OrbitDB存储目录
调用createInstance时传入directory参数,用字符串路径覆盖默认生成逻辑,避免path-browserify的断言错误:
const orbitdb = await OrbitDB.createInstance(ipfs, { directory: 'orbitdb-local-store' // 任意合法字符串,浏览器环境下会映射到IndexedDB存储 });
2. 调整Webpack路径别名配置
修改config-overrides.js,添加path的别名配置,确保path-browserify被正确识别:
const webpack = require('webpack'); module.exports = function override(config) { const fallback = config.resolve.fallback || {}; Object.assign(fallback, { "crypto": require.resolve("crypto-browserify"), "stream": require.resolve("stream-browserify"), "assert": require.resolve("assert"), "http": require.resolve("stream-http"), "https": require.resolve("https-browserify"), "os": require.resolve("os-browserify"), "url": require.resolve("url"), "path": require.resolve("path-browserify") }) // 添加path别名 config.resolve.alias = { ...(config.resolve.alias || {}), 'path': require.resolve('path-browserify') }; config.resolve.fallback = fallback; config.plugins = (config.plugins || []).concat([ new webpack.ProvidePlugin({ process: 'process/browser', Buffer: ['buffer', 'Buffer'] }) ]) return config; }
3. 升级OrbitDB版本
orbit-db 0.28.x版本在浏览器环境下的路径处理存在兼容性bug,升级到0.29.x及以上版本(需确认与ipfs 0.63.5兼容)可修复该问题。
内容的提问来源于stack exchange,提问作者Christian Lacdael
相关产品推荐
相关产品推荐

