kylebarron / parquet-wasm

Rust-based WebAssembly bindings to read and write Apache Parquet data
https://kylebarron.dev/parquet-wasm/
Apache License 2.0
480 stars 19 forks source link

How to use with vite? #545

Open cugarteblair opened 3 weeks ago

cugarteblair commented 3 weeks ago

I would like to use parquet-wasm in my vite project but have been unable to initialize. Here is how I am trying to initialize, also I added the vite-plugin-wasm in my vite.config.ts. I get this error(Note I get the same thing with the await pattern):

_Error initializing WebAssembly module: TypeError: WebAssembly.instantiate(): Import #0 "./parquet_wasm_bg.js": module is not an object or function_

// Here is how I try to initialize

import wasmInit, { readParquet } from "parquet-wasm";

// Provide the correct URL for the WebAssembly file const wasmUrl = new URL('../../node_modules/parquet-wasm/bundler/parquet_wasm_bg.wasm', import.meta.url).href;

// Initialize the WebAssembly module with the provided URL wasmInit(wasmUrl).then(() => { console.log("WebAssembly module initialized successfully"); }).catch((error) => { console.error("Error initializing WebAssembly module:", error); });

kylebarron commented 2 weeks ago

You should inspect the traceback inside the generated parquet_wasm_bg.js, and perhaps put a breakpoint in the WebAssembly.instantiate call. Presumably the way you're passing in a local URL isn't supported by that WebAssembly.instantiate constructor.

mgd722 commented 1 week ago

No idea what the long term implications of this are, but adding the wasm plugin and excluding this package from optimization in my vite.config.js got me rolling. Sample vite.config.js:

import { defineConfig } from 'vite';
import wasm from 'vite-plugin-wasm';

export default defineConfig({
    plugins: [wasm()],
    optimizeDeps: {
        exclude: [
            "parquet-wasm"
        ]
    },
    // ... the rest of your config
}