Skip to main content

kzg-wasm

你的 Vite 配置中包含了以下部分:

optimizeDeps: {
exclude: ['kzg-wasm'],
}

这行配置的作用是让 Vite 在开发模式下不对 kzg-wasm 进行预构建优化(即不将其打包到 node_modules/.vite 文件夹中)。这可能是因为 kzg-wasm 包含 WebAssembly 文件,Vite 的预构建优化可能无法正确处理这些文件,导致加载路径出现问题。

解释为什么这样的配置可以加载

  1. 排除预构建优化: 通过 exclude: ['kzg-wasm'],你告诉 Vite 不要对 kzg-wasm 进行预构建优化。这样,Vite 在开发模式下会直接从 node_modules 中加载 kzg-wasm,而不是从 .vite 文件夹中加载。这可以避免由于预构建优化导致的路径问题。

  2. 正确的路径: 当你排除了 kzg-wasm 的预构建优化后,Vite 会直接使用 kzg-wasm 包中的 WebAssembly 文件路径,即 /node_modules/.pnpm/kzg-wasm@0.2.0/node_modules/kzg-wasm/dist/wasm/kzg.wasm。这就是为什么你的项目可以正确加载 kzg-wasm

总结

通过排除 kzg-wasm 进行预构建优化,你确保了 Vite 在开发模式下直接从 node_modules 中加载 kzg-wasm 包中的 WebAssembly 文件,从而避免了路径问题。

进一步建议

如果你在生产环境中仍然遇到类似问题,可以考虑以下方法:

  1. 检查生产环境配置: 确保生产环境下的 Vite 配置也正确处理了 WebAssembly 文件。

  2. 使用 Vite 插件处理 WebAssembly: 使用 Vite 专门处理 WebAssembly 文件的插件,例如 vite-plugin-wasm

    npm install vite-plugin-wasm

    然后在 vite.config.js 中添加:

    import wasm from 'vite-plugin-wasm';

    export default defineConfig({
    plugins: [react(), wasm()],
    optimizeDeps: {
    exclude: ['kzg-wasm'],
    },
    resolve: {
    alias: {
    events: 'eventemitter3',
    'node:stream/web': 'web-streams-polyfill',
    },
    },
    });

通过这些配置,你应该能够更好地处理 kzg-wasm 包中的 WebAssembly 文件,并确保在开发和生产环境中都能正确加载。