Sub-perintah kargo ini bertujuan untuk membuatnya mudah dan nyaman untuk membangun, mengembangkan, dan menggunakan aplikasi web sisi klien yang ditulis dalam karat.
Perangkat lunak ini dibawa kepada Anda berkat orang -orang luar biasa ini:
Terima kasih!
Saat ini mendukung fitur -fitur berikut:
cargo web build - Akan membangun proyek Anda menggunakan salah satu dari tiga backends web Rust:--target=wasm32-unknown-unknown ; Default)--target=wasm32-unknown-emscripten )--target=asmjs-unknown-emscripten )cargo web check - Akan Teluk Proyek Andacargo web test - akan menjalankan tes Anda di bawah:--nodejs )cargo web start - akan membangun proyek Anda, memulai server web tertanam dan akan terus membangunnya kembali jika perlu; Mendukung pemuatan ulang otomatis dengan --auto-reload .cargo web deploy - Akan membangun proyek Anda dan memancarkan semua file yang diperlukan sehingga Anda dapat dengan mudah menyajikannya secara statis.rustup Juga sangat disarankan agar Anda memeriksa peti stdweb jika Anda ingin berinteraksi dengan dunia JavaScript dalam proyek Anda. cargo-web stdweb js!
$ cargo install cargo-web
Untuk meningkatkan:
$ cargo install --force cargo-web
Atau klon dan bangun dengan $ cargo build --release lalu letakkan di jalur $ Anda.
Di Linux, instalasi dapat gagal dengan pesan yang tidak dapat menemukan OpenSSL, dalam hal ini Anda kemungkinan besar perlu menginstal paket -dev untuk OpenSSL dari repositori distribusi Anda. (Di Ubuntu itu disebut libssl-dev .)
Web.toml cargo-web memiliki file konfigurasi sendiri yang dapat Anda letakkan di sebelah cargo Cargo.toml .
Berikut adalah contoh konfigurasi yang menunjukkan setiap kunci yang didukung:
# The default value of `--target` used when building this crate
# in cases where it's not specified on the command line.
default-target = " wasm32-unknown-unknown "
# This will prepend a given JavaScript file to the resulting `.js` artifact.
# You can put any initialization code here which you'd like to have executed
# when your `.js` file first loads.
#
# This accepts either a string (as shown here), or an array of strings,
# in which case it will prepend all of the specified files in their
# order of appearance.
prepend-js = " src/runtime.js "
[ cargo-web ]
# Asserts the minimum required version of `cargo-web` necessary
# to compile this crate; supported since 0.6.0.
minimum-version = " 0.6.0 "
# These will only take effect on *-emscripten targets.
[ target . emscripten ]
# You can have a target-specific `prepend-js` key.
prepend-js = " src/emscripten_runtime.js "
# This will enable Emscripten's SDL2 port. Consult Emscripten's documentation
# for more details.
link-args = [ " -s " , " USE_SDL=2 " ]
# You can also specify the target by its full name.
[ target . wasm32-unknown-unknown ]
prepend-js = " src/native_runtime.js " Jika Anda menggunakan peti eksternal yang memiliki Web.toml maka cargo-web akan memuatnya dan menggunakannya.
Beberapa batasan tentang Web.toml :
prepend-js yang tumpang tindih. Anda dapat mendefinisikan satu prepend-js global tunggal, atau beberapa yang per target.link-args saat ini tidak dapat memiliki ruang di dalamnya.cargo-web akan memproses file Web.toml dari beberapa peti bersifat deterministik namun tidak ditentukan. Ini berarti Anda tidak boleh bergantung pada pesanan ini dengan cara apa pun. File statis apa pun yang ingin Anda sajikan saat menjalankan cargo web start atau digunakan saat menjalankan cargo web deploy dapat dimasukkan ke dalam direktori yang disebut static di akar peti Anda. Tidak ada artefak statis yang dibutuhkan secara default; File index.html akan secara otomatis dihasilkan untuk Anda jika hilang. Anda dapat, tentu saja, meletakkan file static/index.html Anda sendiri, dalam hal ini akan digunakan sebagai pengganti yang diotogenerasi.
cargo-web Selama Kompilasi Jika selama kompilasi Anda ingin mendeteksi bahwa proyek Anda sedang dibangun dengan cargo-web Anda dapat memeriksa variabel lingkungan COMPILING_UNDER_CARGO_WEB , yang akan diatur ke 1 .
cargo-web di travis Anda dapat menggunakan skrip berikut untuk mengunduh dan menginstal cargo-web terbaru:
CARGO_WEB_RELEASE= $( curl -L -s -H ' Accept: application/json ' https://github.com/koute/cargo-web/releases/latest )
CARGO_WEB_VERSION= $( echo $CARGO_WEB_RELEASE | sed -e ' s/.*"tag_name":"([^"]*)".*/1/ ' )
if [ " $( uname -s ) " == " Darwin " ] ; then
CARGO_WEB_HOST_TRIPLE= " x86_64-apple-darwin "
else
CARGO_WEB_HOST_TRIPLE= " x86_64-unknown-linux-gnu "
fi
CARGO_WEB_URL= " https://github.com/koute/cargo-web/releases/download/ $CARGO_WEB_VERSION /cargo-web- $CARGO_WEB_HOST_TRIPLE .gz "
echo " Downloading cargo-web from: $CARGO_WEB_URL "
curl -L $CARGO_WEB_URL | gzip -d > cargo-web
chmod +x cargo-web
mkdir -p ~ /.cargo/bin
mv cargo-web ~ /.cargo/bin Secara default cargo web test akan menjalankan tes Anda di bawah Chrome tanpa kepala. Untuk dapat menggunakan ini di Travis, Anda perlu menambahkan sesuatu seperti ini ke .travis.yml Anda:
addons :
chrome : stable wasm32-unknown-unknown -nly) Saat membangun proyek secara default cargo-web menghasilkan runtime runtime mandiri untuk Anda. Artinya, file .js yang dihasilkan dapat segera dimasukkan ke dalam tag <script> atau diluncurkan dengan node.js tanpa harus memuatnya secara manual atau melakukan sesuatu yang lebih ekstra, namun ini membatasi Anda ketika datang ke penyesuaian.
Jika Anda ingin memiliki sedikit lebih banyak kontrol tentang bagaimana modul Anda dimuat maka Anda dapat memberi tahu cargo-web untuk menghasilkan modul non-standalone, seperti perpustakaan untuk Anda dengan opsi --runtime library-es6 . Ini akan menghasilkan file .js yang mengekspor fungsi pabrik dengan antarmuka berikut:
export default function ( ) {
return {
imports : { ... } ,
initialize : function ( instance ) { ... }
} ;
} Di sini Anda harus membuat instantiate modul WebAssembly sendiri; Dalam hal ini Anda harus melewati imports sebagai impornya, dan kemudian segera setelah instantiating, Call initialize .
Misalnya, dengan asumsi Anda akan memberi nama modul Anda yang dihasilkan oleh cargo-web sebagai my-module.mjs dan my-module.wasm Anda dapat membuat instantiasi seperti ini dari node.js:
import fs from "fs" ;
import factory from "my-module.mjs" ;
// We read in the `.wasm` module.
const bytecode = fs . readFileSync ( "my-module.wasm" ) ;
const wasm = new WebAssembly . Module ( bytecode ) ;
// We instantiate it.
const instance = factory ( ) ;
const compiled = new WebAssembly . Instance ( wasm , instance . imports ) ;
// This will initialize the module and call your `main`, if you have one.
const exports = instance . initialize ( compiled ) ;
// In the object it returns you can find any functions which
// you've exported with `stdweb`'s `#[js_export]` macro.
console . log ( exports . add ( 1 , 2 ) ) ; Kemudian Anda dapat menjalankannya dengan node --experimental-modules run.mjs .
Ini berguna jika Anda ingin memuat file .wasm Anda dari URL khusus atau Anda ingin mengintegrasikan output dengan bundler JavaScript, atau apa pun yang mengharuskan Anda memuat modul sendiri.
0.6.26--no-default-features telah diperbaikimime-guess sekarang digunakan untuk menebak jenis mime oleh server web tertanam0.6.25cargo web start sekarang akan mencoba untuk tidak memicu pembangunan kembali yang berlebihan saat file proyek dimodifikasi secara berurutan0.6.24[target.'cfg(...)'.dependencies] sekarang didukung dengan benarcfg(cargo_web) untuk mendeteksi kapan pun peti Anda dikompilasi di bawah cargo-webtarget/wasm32-unknown-unknown/*/deps/*.wasm sekarang diabaikan; Ini harus mencegah cargo-web dari memproses artefak yang cdylib .wasmcargo-web sekarang tersedia sebagai perpustakaan melalui antarmuka berbasis structopt0.6.23cargo web checkwasm32-unknown-unknown sekarang menjadi default0.6.22deploy sekarang dapat diberitahu di mana harus digunakan menggunakan parameter -o / --outputAccess-Control-Allow-Origin: * sekarang selalu dikirim oleh server web tertanamwasm32-unknown-unknown sekarang didukung asalkan stdweb yang cukup baru digunakan0.6.211.38.19 ; Target berbasis emscripten sekarang harus bekerja lagi di malam hariwasm32-unknown-unknown sekarang diurutkanwasm32-unknown-unknown0.6.20cargo install sekarang harus berfungsi lagideploy tidak boleh panik saat tidak menemukan target yang valid0.6.19cargo install sekarang harus dikompilasi alih -alih gagal di beberapa lingkungan1.26.20.6.18index.html tidak memiliki garis baru sebelum dokternya lagi0.6.171.25.00.6.16wasm32-unknown-unknown sekarang menggunakan WebAssembly.instantiateStreaming bila tersediawasm32-unknown-unknowncargo-web diarahkanBerlisensi di bawah salah satu dari
di pilihan Anda.
Kecuali jika Anda secara eksplisit menyatakan sebaliknya, kontribusi apa pun secara sengaja diserahkan untuk dimasukkan dalam pekerjaan oleh Anda, sebagaimana didefinisikan dalam lisensi APACHE-2.0, harus dilisensikan ganda seperti di atas, tanpa syarat atau ketentuan tambahan.