2.9 KiB
Contribution Guide
Settting up your local development environment
Add the wasm target
rustup target add wasm32-unknown-unknown
Build
cargo build --target wasm32-unknown-unknown
Examples
TODO: Add more info
stdweb
In order to run the examples in ./yew-stdweb, you may wish to install cargo-web:
cargo install cargo-web
Test
Web Tests
First, ensure that wasm-bindgen-cli is installed.
Instructions
Additionally a webdriver must be installed locally and configured to be on the
PATH. Currently supports geckodriver, chromedriver, and safaridriver,
although more driver support may be added! You can download these at:
- geckodriver - https://github.com/mozilla/geckodriver/releases
- chromedriver - http://chromedriver.chromium.org/downloads
- safaridriver - should be preinstalled on OSX
Lastly, the fetch tests require a local httpbin server running on port 8000. We recommend running this with Docker:
docker run -p 8000:80 kennethreitz/httpbin
Macro Tests
When adding or updating tests, please make sure you have updated the appropriate stderr file, which you can find here for the html! macro. These files ensure that macro compilation errors are correct and easy to understand.
To update or generate a new stderr file you can run TRYBUILD=overwrite cargo test --test macro_test or TRYBUILD=overwrite cargo test --test derive_props_test from the yew-macro directory.
Running Tests
./ci/run_tests.sh
or
cargo test --target wasm32-unknown-unknown --features wasm_test
Benchmarks
If you wish to improve the performance of Yew, we ask you to prove the improvements of your changes through benchmarking.
- Fork and clone https://github.com/yewstack/js-framework-benchmark
- Update
frameworks/yew/Cargo.tomlwith your fork of Yew and the branch for your changes - Open a new PR with your
Cargo.tomlchanges
Feel free to add new benchmark tests if the current benchmark coverage is insufficient!
Writing APIs
When building new APIs, think about what it would be like to use them. Would this API cause confusing and hard to pin error mesages? Would this API integrate well with other APIs? Is it intuitive to use this API?
There are many resources which provide good guidance on how to write APIs, a few of which are given below. These are only guidlines and while they are useful and should be followed where possible, in some cases it may not be possible to do so.