21 releases (8 breaking)

0.8.0 Nov 16, 2022
0.7.11 Sep 11, 2022
0.7.10 May 24, 2022
0.7.3 Mar 5, 2022

#294 in WebAssembly

Download history 21/week @ 2023-12-15 65/week @ 2023-12-22 129/week @ 2023-12-29 259/week @ 2024-01-05 133/week @ 2024-01-12 89/week @ 2024-01-19 103/week @ 2024-01-26 134/week @ 2024-02-02 192/week @ 2024-02-09 205/week @ 2024-02-16 164/week @ 2024-02-23 163/week @ 2024-03-01 276/week @ 2024-03-08 149/week @ 2024-03-15 139/week @ 2024-03-22 100/week @ 2024-03-29

729 downloads per month

MIT license

59KB
1.5K SLoC

rsw-rs

rsw = rs(rust)w(wasm) - A command-line tool for automatically rebuilding local changes, based on the wasm-pack implementation.

Englist | 简体中文

Pre-installed

Usage

# Rust - install globally
cargo install rsw
# help
rsw -h

# rsw.toml - initial configuration
rsw init

# generate a wasm project
rsw new <name>

# dev mode
rsw watch

# release mode
rsw build

# clean - link & build
rsw clean

Awesome rsw

Logger

# @see: https://github.com/env-logger-rs/env_logger
# RUST_LOG=rsw=<info|trace|debug|error|warn> rsw <watch|build|new>
# 1. info
RUST_LOG=rsw=info rsw <SUBCOMMAND>

# 2. all: info, trace, debug, error, warn
RUST_LOG=rsw rsw <SUBCOMMAND>

.watchignore

Defines files/paths to be ignored. Similar to .gitignore.

Example:

# .watchignore
*.js
a/b/**/*.txt
!a/b/**/main.txt

rsw.toml

configuration file

Options

Create rsw.toml in the project root path, configure the rust crate parameter, and run the rsw watch or rsw build command.

  • name - Profile name (optional)
  • version - Profile version (optional)
  • interval - Development mode rsw watch, time interval for file changes to trigger wasm-pack build, default 50 milliseconds
  • cli - npm | yarn | pnpm, default is npm. Execute link using the specified cli, e.g. npm link
  • [new] - Quickly generate a crate with wasm-pack new, or set a custom template in rsw.toml -> [new] -> using
    • using - wasm-pack | rsw | user, default is wasm-pack
      • wasm-pack - rsw new <name> --template <template> --mode <normal|noinstall|force> wasm-pack new doc
      • rsw - rsw new <name>, built-in templates
      • user - rsw new <name>, if dir is not configured, use wasm-pack new <name> to initialize the project.
    • dir - Copy all files in this directory. This field needs to be configured when using = "user". using = "wasm-pack" or using = "rsw", this field will be ignored
  • [[crates]] - Is an array that supports multiple rust crate configurations
    • name - npm package name, supporting organization, e.g. @rsw/foo
    • root - Relative to the project root path, default is .
    • link - true | false,default is false, Whether to execute the link command after this rust crate is built
    • target - bundler | nodejs | web | no-modules, default is web
    • scope - npm organization
    • out-dir - npm package output path, default pkg
    • [crates.watch] - Development mode
      • run - Whether this crate needs to be watching, default is true
      • profile - dev | profiling, default is dev
    • [crates.build] - Production mode
      • run - Whether this crate needs to be build, default is true
      • profile - release | profiling, default is release

Note: name in [[crates]] is required, other fields are optional.

.rsw

rsw watch - temp dir

  • rsw.info - information about the watch mode
    • [RSW::OK]
    • [RSW::ERR]
    • [RSW::NAME]
    • [RSW::PATH]
    • [RSW::BUILD]
  • rsw.err - wasm-pack build error
  • rsw.crates

Example

# rsw.toml

name = "rsw"
version = "0.1.0"

#! time interval for file changes to trigger wasm-pack build, default `50` milliseconds
interval = 50

#! link
#! npm link @see https://docs.npmjs.com/cli/v8/commands/npm-link
#! yarn link @see https://classic.yarnpkg.com/en/docs/cli/link
#! pnpm link @see https://pnpm.io/cli/link
#! The link command will only be executed if `[[crates]] link = true`
#! cli: `npm` | `yarn` | `pnpm`, default is `npm`
cli = "npm"

#! ---------------------------

#! rsw new <name>
[new]
#! @see https://rustwasm.github.io/docs/wasm-pack/commands/new.html
#! using: `wasm-pack` | `rsw` | `user`, default is `wasm-pack`
#! 1. wasm-pack: `rsw new <name> --template <template> --mode <normal|noinstall|force>`
#! 2. rsw: `rsw new <name>`, built-in templates
#! 3. user: `rsw new <name>`, if `dir` is not configured, use `wasm-pack new <name>` to initialize the project
using = "wasm-pack"
#! this field needs to be configured when `using = "user"`
#! `using = "wasm-pack"` or `using = "rsw"`, this field will be ignored
#! copy all files in this directory
dir = "my-template"

#! ################# NPM Package #################

#! When there is only `name`, other fields will use the default configuration

#! 📦 -------- package: rsw-hello --------
[[crates]]
#! npm package name (path: $ROOT/rsw-hello)
name = "rsw-hello"
#! run `npm link`: `true` | `false`, default is `false`
link = false

#! 📦 -------- package: @rsw/utils --------
[[crates]]
#! npm package name (path: $ROOT/utils)
name = "utils"
# #! scope: npm org
scope = "rsw"
#! run `npm link`: `true` | `false`, default is `false`
link = false

#! 📦 -------- package: @rsw/hello --------
[[crates]]
#! npm package name (path: $ROOT/@rsw/hello)
name = "@rsw/hello"
#! default is `.`
root = "."
#! default is `pkg`
out-dir = "pkg"
#! target: bundler | nodejs | web | no-modules, default is `web`
target = "web"
#! run `npm link`: `true` | `false`, default is `false`
link = false
#! rsw watch
[crates.watch]
#! default is `true`
run = true
#! profile: `dev` | `profiling`, default is `dev`
profile = "dev"
#! rsw build
[crates.build]
#! default is `true`
run = true
#! profile: `release` | `profiling`, default is `release`
profile = "release"

License

MIT License © 2022 lencx

Dependencies

~10–23MB
~315K SLoC