diff --git a/crates/cli-support/src/js/mod.rs b/crates/cli-support/src/js/mod.rs index d9d01894..dad09461 100644 --- a/crates/cli-support/src/js/mod.rs +++ b/crates/cli-support/src/js/mod.rs @@ -450,6 +450,17 @@ impl<'a> Context<'a> { } else { "" }; + + let default_module_path = match self.config.mode { + OutputMode::Web => { + "\ + if (typeof module === 'undefined') { + module = import.meta.url.replace(/\\.js$/, '_bg.wasm'); + }" + } + _ => "", + }; + let ts = Self::ts_for_init_fn(mem.import.is_some()); // Initialize the `imports` object for all import definitions that we're @@ -475,6 +486,7 @@ impl<'a> Context<'a> { let js = format!( "\ function init(module{init_memory_arg}) {{ + {default_module_path} let result; const imports = {{}}; {imports_init} @@ -518,6 +530,7 @@ impl<'a> Context<'a> { }} ", init_memory_arg = init_memory_arg, + default_module_path = default_module_path, init_memory1 = init_memory1, init_memory2 = init_memory2, start = if needs_manual_start { diff --git a/examples/without-a-bundler/index.html b/examples/without-a-bundler/index.html index ee71e3d3..94efda91 100644 --- a/examples/without-a-bundler/index.html +++ b/examples/without-a-bundler/index.html @@ -12,20 +12,23 @@ // will "boot" the module and make it ready to use. Currently browsers // don't support natively imported WebAssembly as an ES module, but // eventually the manual initialization won't be required! - import { add, default as init } from './pkg/without_a_bundler.js'; + import init, { add } from './pkg/without_a_bundler.js'; async function run() { // First up we need to actually load the wasm file, so we use the // default export to inform it where the wasm file is located on the // server, and then we wait on the returned promise to wait for the // wasm to be loaded. + // It may look like this: `await init('./pkg/without_a_bundler_bg.wasm');`, + // but there is also a handy default inside `init` function, which uses + // `import.meta` to locate the wasm file relatively to js file // // Note that instead of a string here you can also pass in an instance // of `WebAssembly.Module` which allows you to compile your own module. // Also note that the promise, when resolved, yields the wasm module's // exports which is the same as importing the `*_bg` module in other // modes - await init('./pkg/without_a_bundler_bg.wasm'); + await init(); // And afterwards we can use all the functionality defined in wasm. const result = add(1, 2);