Skip to content

Latest commit

 

History

History
107 lines (78 loc) · 3.36 KB

README.md

File metadata and controls

107 lines (78 loc) · 3.36 KB

📦✨ wasm-pack

pack up the wasm and publish it to npm!

Build Status Build status

the goal of this project is to create a portable command line tool for publishing compiled wasm projects to the npm registry for the consumption of js devs using the npm CLI, yarn, or any other CLI tool that interfaces with the npm registry.

this project is a part of the rust-wasm group. you can find more info by visiting that repo!

demo

🔮 prerequisities

this project is written in rust. get rust to work on this project.

if you want to publish packages, you'll also need an account on npm and have node/npm installed.

🏃‍♀️ up and running

  1. fork and clone this repository
  2. install node/npm
  3. cd wasm-pack
  4. cargo run

💃 commands

  • help: display available commands
  • 🐣 init: create necessary files for js interop and npm publishing
    • optionally pass a path to a dir that contains a Cargo.toml, e.g.:
      wasm-pack init examples/js-hello-world
      
    • optionally pass a scope name to generate a package.json for a scoped pkg, e.g.:
      wasm-pack init examples/scopes-hello-world --scope test
      
      generates a package.json for an npm package called @test/scopes-hello-world
  • 🍱 pack: create a tarball but don't push to the npm registry (see https://docs.npmjs.com/cli/pack)
  • 🎆 publish: create a tarball and publish to the npm registry (see https://docs.npmjs.com/cli/publish)

logging

We generate a wasm-pack.log file if wasm-pack errors on you, and you can customize the log verbosity using the verbosity flag.

Verbosity Result
-v All Info, Warn, and Errors are logged
-vv All Debug, Info, Warn, and Errors are logged
-vvv All Trace, Debug, Info, Warn, and Errors are logged

⚙️ how to use

  1. write a crate in Rust.
  2. add wasm-bindgen to your Cargo.toml:
[lib]
crate-type = ["cdylib"]

[dependencies]
wasm-bindgen = "0.2"
  1. add this to the top of your src/lib.rs:
#![feature(proc_macro, wasm_import_module, wasm_custom_section)]

extern crate wasm_bindgen;

use wasm_bindgen::prelude::*;
  1. annotate your public functions with #[wasm_bindgen], for example:
#[wasm_bindgen]
extern {
    fn alert(s: &str);
}

#[wasm_bindgen]
pub fn greet(name: &str) {
    alert(&format!("Hello, {}!", name));
}
  1. install this tool: cargo install wasm-pack
  2. run wasm-pack init, optionally, pass a path to a dir or a scope (see above for details)
  3. this tool generates files in a pkg dir
  4. to publish to npm, run wasm-pack publish (making sure you are logged in with npm)