-
Notifications
You must be signed in to change notification settings - Fork 474
Open
Labels
PR attachedthere's a PR open for this issuethere's a PR open for this issuecurrent releasecurrent todo itemscurrent todo items
Milestone
Description
💡 Feature description
Using wasm-pack to build libraries is nice, but binaries are also good to have, both in the npm ecosystem and for browser usage (see also wasm-bindgen/wasm-bindgen#1630 and rust-gamedev/wg#51). However, wasm-pack asserts in a few places that all crates being built are libraries.
💻 Basic example
A crate with the following code in src/main.rs should build and run as intended with wasm-pack build --target web:
#[cfg(target_arch = "wasm32")]
use wasm_bindgen::prelude::*;
#[cfg(target_arch = "wasm32")]
fn display(text: &str) {
// Use `web_sys`'s global `window` function to get a handle on the global
// window object.
let window = web_sys::window().expect("no global `window` exists");
let document = window.document().expect("should have a document on window");
let body = document.body().expect("document should have a body");
// Manufacture the element we're gonna append
let val = document.create_element("p").expect("failed to create a <p>");
val.set_inner_html(text);
body.append_child(&val).expect("failed to append child to body");
}
#[cfg(not(target_arch = "wasm32"))]
fn display(text: &str) {
println!("{}", text);
}
fn main() {
display("Hello from Rust!");
}(I've made the changes needed in wasm-bindgen already; they're included in v0.2.54. I have a basic implementation for this feature already, but it needs additional tuning to behave as expected in all cases.)
hecrj, ctaggart, grandafrato, kettle11, mre and 18 more
Metadata
Metadata
Assignees
Labels
PR attachedthere's a PR open for this issuethere's a PR open for this issuecurrent releasecurrent todo itemscurrent todo items