คำสั่งย่อยของสินค้านี้มีจุดมุ่งหมายเพื่อให้ง่ายและสะดวกในการสร้างพัฒนาและปรับใช้เว็บแอปพลิเคชันฝั่งไคลเอ็นต์ที่เขียนด้วย Rust
ซอฟต์แวร์นี้มาถึงคุณต้องขอบคุณผู้คนที่ยอดเยี่ยมเหล่านี้:
ขอบคุณ!
ปัจจุบันรองรับคุณสมบัติต่อไปนี้:
cargo web build - จะสร้างโครงการของคุณโดยใช้หนึ่งในสามเว็บแบ็กเอนด์ของ Rust ของ Rust:--target=wasm32-unknown-unknown ;--target=wasm32-unknown-emscripten )--target=asmjs-unknown-emscripten )cargo web check - จะพิมพ์โครงการของคุณcargo web test - จะทำการทดสอบของคุณภายใต้:--nodejs )cargo web start - จะสร้างโครงการของคุณเริ่มต้นเว็บเซิร์ฟเวอร์แบบฝังและจะสร้างใหม่อย่างต่อเนื่องหากจำเป็น รองรับการโหลดซ้ำอัตโนมัติด้วย --auto-reloadcargo web deploy - จะสร้างโครงการของคุณและปล่อยไฟล์ที่จำเป็นทั้งหมดเพื่อให้คุณสามารถให้บริการได้อย่างง่ายดายrustup นอกจากนี้ยังขอแนะนำอย่างยิ่งให้คุณตรวจสอบลัง Stdweb หากคุณต้องการโต้ตอบกับโลก JavaScript ในโครงการของคุณ (อันที่จริงแล้ว cargo-web คือสิ่งที่ทำให้สามารถใช้มาโคร js! ของ stdweb บนแบ็กเอนด์ WebAssembly ของ Rust Native ได้)
$ cargo install cargo-web
เพื่ออัพเกรด:
$ cargo install --force cargo-web
หรือโคลนและสร้างด้วย $ cargo build --release แล้ววางในเส้นทาง $ ของคุณ
บน Linux การติดตั้งอาจล้มเหลวด้วยข้อความที่ไม่สามารถหา openSSL ได้ซึ่งในกรณีนี้คุณน่าจะต้องติดตั้งแพ็คเกจ -dev สำหรับ OpenSSL จากที่เก็บการกระจายของคุณ (บน Ubuntu เรียกว่า libssl-dev )
Web.toml cargo-web มีไฟล์การกำหนดค่าของตัวเองซึ่งคุณสามารถใส่ถัดจาก Cargo.toml ของ cargo
นี่คือตัวอย่างการกำหนดค่าที่แสดงคีย์ที่รองรับทุกรายการ:
# 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 " หากคุณใช้ลังภายนอกใด ๆ ที่มี Web.toml แล้ว cargo-web จะ โหลดและใช้งาน
ข้อ จำกัด บางประการเกี่ยวกับ Web.toml :
prepend-js ที่ทับซ้อนกันได้ คุณสามารถกำหนดค่า prepend-js ทั่วโลกเดียวหรือหลายเป้าหมายต่อเป้าหมายlink-args ในปัจจุบันไม่สามารถมีช่องว่างใด ๆ ได้cargo-web จะประมวลผลไฟล์ Web.toml จากหลาย ๆ ลังนั้นเป็นตัวกำหนด แต่ยังไม่ได้ระบุ ซึ่งหมายความว่าคุณไม่ควรพึ่งพาคำสั่งนี้ แต่อย่างใด ไฟล์คงที่ใด ๆ ที่คุณต้องการให้บริการเมื่อเรียกใช้ cargo web start หรือปรับใช้เมื่อใช้งาน cargo web deploy สามารถใส่ได้ในไดเรกทอรีที่เรียกว่า static ในรูทของลังของคุณ ไม่จำเป็นต้องมีสิ่งประดิษฐ์แบบคงที่โดยค่าเริ่มต้น ไฟล์ index.html จะถูกสร้างขึ้นโดยอัตโนมัติหากขาดหายไป แน่นอนว่าคุณสามารถใส่ไฟล์ static/index.html ของคุณเองซึ่งในกรณีนี้จะใช้แทนไฟล์ autogenerated
cargo-web ระหว่างการรวบรวม หากในระหว่างการรวบรวมคุณต้องการตรวจพบว่าโครงการของคุณถูกสร้างขึ้นด้วย cargo-web คุณสามารถตรวจสอบตัวแปรสภาพแวดล้อม COMPILING_UNDER_CARGO_WEB ซึ่งจะถูกตั้งค่าเป็น 1
cargo-web บนเทรวิส คุณสามารถใช้สคริปต์ต่อไปนี้เพื่อดาวน์โหลดและติดตั้ง cargo-web ล่าสุด:
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 โดยค่าเริ่มต้น cargo web test จะเรียกใช้การทดสอบของคุณภายใต้ chrome ที่ไม่มีหัว เพื่อให้สามารถใช้สิ่งนี้กับเทรวิสได้คุณต้องเพิ่มสิ่งนี้ลงใน .travis.yml :
addons :
chrome : stable wasm32-unknown-unknown -only) เมื่อสร้างโครงการโดยค่า cargo-web สร้างรันไทม์รันไทม์แบบสแตนด์อโลนสำหรับคุณ สิ่งนี้หมายความว่าไฟล์ .js ที่สร้างขึ้นสามารถใส่ได้ทันทีภายในแท็ก <script> หรือเปิดตัวด้วย node.js โดยไม่ต้องโหลดด้วยตนเองหรือทำอะไรพิเศษ แต่สิ่งนี้จะ จำกัด คุณเมื่อมันมาถึงการปรับแต่ง
หากคุณต้องการควบคุมเพิ่มเติมเล็กน้อยเกี่ยวกับวิธีการโหลดโมดูลของคุณคุณสามารถบอก cargo-web เพื่อสร้างโมดูลที่ไม่ใช่มาตรฐานและเป็นโมดูลไลบรารีสำหรับคุณด้วยตัวเลือก --runtime library-es6 ซึ่งจะส่งผลให้ไฟล์ .js ที่ส่งออกฟังก์ชั่นโรงงานด้วยอินเทอร์เฟซต่อไปนี้:
export default function ( ) {
return {
imports : { ... } ,
initialize : function ( instance ) { ... }
} ;
} ที่นี่คุณต้องยกตัวอย่างโมดูล WebAssembly ด้วยตัวเอง ในกรณีนี้คุณต้องส่ง imports เป็นการนำเข้าและจากนั้นทันทีหลังจากอินสแตนซ์มันเรียก initialize
ตัวอย่างเช่นสมมติว่าคุณจะตั้งชื่อโมดูลของคุณที่สร้างขึ้นโดย cargo-web เป็น my-module.mjs และ my-module.wasm คุณสามารถสร้างอินสแตนซ์แบบนี้ได้จาก 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 ) ) ; จากนั้นคุณสามารถเรียกใช้งานด้วย node --experimental-modules run.mjs
สิ่งนี้มีประโยชน์หากคุณต้องการโหลดไฟล์ .wasm ของคุณจาก URL ที่กำหนดเองหรือคุณต้องการรวมเอาต์พุตเข้ากับ JavaScript Bundler หรือสิ่งอื่นใดที่คุณต้องโหลดโมดูลด้วยตัวเอง
0.6.26--no-default-features ได้รับการแก้ไขแล้วmime-guess กำลังถูกใช้เพื่อเดาประเภท MIME โดยเว็บเซิร์ฟเวอร์แบบฝังตัว0.6.25cargo web start0.6.24[target.'cfg(...)'.dependencies] ได้รับการสนับสนุนอย่างเหมาะสมcfg(cargo_web) เพื่อตรวจจับเมื่อใดก็ตามที่ลังของคุณถูกรวบรวมภายใต้ cargo-webtarget/wasm32-unknown-unknown/*/deps/*.wasm ถูกละเว้น; สิ่ง .wasm ควร cdylib cargo-webcargo-web เป็นห้องสมุดผ่านอินเตอร์เฟส structopt0.6.23cargo web checkwasm32-unknown-unknown ตอนนี้เป็นค่าเริ่มต้น0.6.22deploy สามารถบอกได้ว่าจะปรับใช้โดยใช้พารามิเตอร์ -o / --outputAccess-Control-Allow-Origin: * ตอนนี้ถูกส่งโดยเว็บเซิร์ฟเวอร์แบบฝังอยู่เสมอwasm32-unknown-unknown ได้รับการสนับสนุนในขณะนี้หากใช้ stdweb ที่เพียงพอเมื่อเร็ว ๆ นี้0.6.211.38.19 ; เป้าหมายที่ใช้ Emscripten ควรทำงานอีกครั้งในทุกคืนwasm32-unknown-unknown ถูกจัดเรียงแล้วwasm32-unknown-unknown0.6.20cargo install ควรทำงานอีกครั้งdeploy ไม่ควรตกใจเมื่อไม่พบเป้าหมายที่ถูกต้อง0.6.19cargo install ควรรวบรวมแทนที่จะล้มเหลวในบางสภาพแวดล้อม1.26.20.6.18index.html ไม่มีบรรทัดใหม่ก่อนที่จะใช้เอกสารอีกต่อไป0.6.171.25.00.6.16wasm32-unknown-unknown ใช้ WebAssembly.instantiateStreaming เมื่อพร้อมใช้งานwasm32-unknown-unknowncargo-web ถูกเปลี่ยนเส้นทางได้รับใบอนุญาตภายใต้
ตามตัวเลือกของคุณ
เว้นแต่คุณจะระบุอย่างชัดเจนเป็นอย่างอื่นการมีส่วนร่วมใด ๆ ที่ส่งโดยเจตนาเพื่อรวมไว้ในงานโดยคุณตามที่กำหนดไว้ในใบอนุญาต Apache-2.0 จะได้รับใบอนุญาตคู่ดังกล่าวข้างต้นโดยไม่มีข้อกำหนดหรือเงื่อนไขเพิ่มเติมใด ๆ