使用@metaplex-foundations/js实现铸币功能时遇TypeError错误求助
Solana铸币开发报错:TypeError: (0 , codecs_1.getBytesCodec) is not a function
我正在用@metaplex-foundation/js库开发Solana铸币功能,已经编写好React组件代码,也通过webpack配置重写解决了之前的问题,但运行时触发以下错误:TypeError: (0 , codecs_1.getBytesCodec) is not a function
错误源自@solana/spl-token-metadata库。我是Solana新手,需要先成功建立Metaplex连接才能进行铸币操作,求技术支持。
React组件代码
import { useConnection, useWallet, } from "@solana/wallet-adapter-react"; import { Metaplex, walletAdapterIdentity } from "@metaplex-foundation/js"; import { WalletMultiButton, } from "@solana/wallet-adapter-react-ui"; const Content = () => { const wallet = useWallet(); const { connection } = useConnection(); const mintEntryPass = async () => { Metaplex.make(connection).use(walletAdapterIdentity(wallet)); // const metaplexPlugin = ; // const candyMachineAddress = new PublicKey( // process.env.REACT_APP_CANDY_MACHINE_ID // ); let candyMachine; let walletBalance; }; return ( <div className="flex p-2 justify-center"> <WalletMultiButton /> <button onClick={mintEntryPass}> Mint </button> </div> ); };
Webpack配置重写文件
const webpack = require("webpack"); module.exports = function override(config) { const fallback = config.resolve.fallback || {}; Object.assign(fallback, { crypto: require.resolve("crypto-browserify"), path: require.resolve("path-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"), zlib: require.resolve("browserify-zlib"), "process/browser": require.resolve("process/browser"), }); config.resolve.fallback = fallback; config.plugins = (config.plugins || []).concat([ new webpack.ProvidePlugin({ process: "process/browser", Buffer: ["buffer", "Buffer"], }), ]); return config; };
完整错误信息(翻译后)
React Router 在渲染期间捕获以下错误:TypeError: (0 , codecs_1.getBytesCodec) 不是一个函数 在 ./node_modules/@solana/spl-token-metadata/lib/cjs/state.js (state.ts:6:1) 在 options.factory (react refresh:6:1) 在 __webpack_require__ (bootstrap:22:1) 在 fn (hot module replacement:61:1) 在 ./node_modules/@solana/spl-token-metadata/lib/cjs/index.js (index.ts:4:1) 在 options.factory (react refresh:6:1) 在 __webpack_require__ (bootstrap:22:1) 在 fn (hot module replacement:61:1) 在 ./node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/@solana/spl-token/lib/cjs/extensions/tokenMetadata/actions.js (actions.ts:4:1) 在 options.factory (react refresh:6:1)
解决方向
检查依赖版本兼容性
- 查看
@metaplex-foundation/js官方文档,确认推荐的@solana/web3.js、@solana/spl-token及@solana/spl-token-metadata版本 - 执行
npm list @solana/spl-token-metadata检查是否存在多版本冲突(错误栈显示路径中有嵌套的依赖,大概率是版本不一致) - 删除
node_modules和package-lock.json,重新安装指定版本的依赖
- 查看
修复Metaplex初始化代码
当前代码创建Metaplex实例后未保存引用,后续无法调用铸币方法,修正如下:const mintEntryPass = async () => { if (!wallet.connected) return; // 先检查钱包是否连接 // 创建并保存Metaplex实例 const metaplex = Metaplex.make(connection).use(walletAdapterIdentity(wallet)); // 后续可调用metaplex.nfts().create()或糖果机相关方法 };补充缺失依赖
getBytesCodec来自@solana/codecs相关包,可能未安装或版本错误,执行:npm install @solana/codecs-core @solana/codecs-data-structures
内容的提问来源于stack exchange,提问作者niishaaant
相关产品推荐
相关产品推荐

