jco
ห่วงโซ่เครื่องมือ JavaScript สำหรับการทำงานกับ WebAssembly Components
โครงการ Bytecode Alliance
Jco จัดเตรียม toolchain JS ดั้งเดิมอย่างสมบูรณ์สำหรับการทำงานกับ WebAssembly Components ใน JavaScript
คุณสมบัติได้แก่:
ไบนารี Wasm Component "Transpiling" ลงในโมดูล ES ที่สามารถทำงานในสภาพแวดล้อม JS ใดก็ได้
รองรับ WASI Preview2 ใน Node.js และเบราว์เซอร์ (ทดลอง)
การสร้างส่วนประกอบของตัวช่วย Wasm Tools ซึ่งพร้อมสำหรับใช้เป็นไลบรารีหรือคำสั่ง CLI สำหรับการใช้งานในสภาพแวดล้อม JS ดั้งเดิม รวมถึงตัวช่วยเพิ่มประสิทธิภาพสำหรับส่วนประกอบผ่าน Binaryen
เรียกใช้และให้บริการคำสั่ง เช่น Wasmtime เนื่องจากเป็นการใช้งาน JS ของ Command และ HTTP Proxy worlds
คำสั่ง "Componentize" เพื่อสร้างส่วนประกอบที่เขียนด้วย JavaScript (wrapper ของ ComponentizeJS) ได้อย่างง่ายดาย
สำหรับการสร้างส่วนประกอบในภาษาอื่น โปรดดูโปรเจ็กต์ Cargo Component สำหรับ Rust และ Wit Bindgen สำหรับผู้ช่วยเหลือแขกที่หลากหลาย
ติดตั้ง npm @bytecodealliance/jco
Jco สามารถใช้เป็นการนำเข้าไลบรารีหรือเป็น CLI ผ่านทางคำสั่ง jco
ดูหน้าเวิร์กโฟลว์ตัวอย่างสำหรับตัวอย่างการใช้งานแบบเต็ม
การใช้งาน: jco <command> [ตัวเลือก] jco - เครื่องมือส่วนประกอบ WebAssembly JS JS Component Transpilation Bindgen & Wasm Tools สำหรับ JS ตัวเลือก: -V, --version ส่งออกหมายเลขเวอร์ชัน -h, --help แสดงความช่วยเหลือสำหรับ commandCommands: แยกส่วนประกอบ [ตัวเลือก] <js-source> สร้างส่วนประกอบจากโมดูล JavaScript transpile [ตัวเลือก] <component-path> แปลส่วนประกอบ WebAssembly เป็น JS + core Wasm สำหรับการดำเนินการ JavaScript ประเภท [ตัวเลือก] <wit-path> สร้างประเภทสำหรับ WIT ที่กำหนด run [options] <command> [args...] เรียกใช้คอมโพเนนต์คำสั่ง WASI ให้บริการ [ตัวเลือก] <เซิร์ฟเวอร์> [args...] ให้บริการส่วนประกอบ WASI HTTP opt [ตัวเลือก] <component-file> ปรับส่วนประกอบ Wasm ให้เหมาะสม รวมถึงการรันการเพิ่มประสิทธิภาพ Binaryen ของ wasm-opt wit [ตัวเลือก] <component-path> แยก WIT จาก WebAssembly Component [wasm-tools component wit] พิมพ์ [ตัวเลือก] <input> พิมพ์ข้อความ WebAssembly WAT สำหรับไฟล์ไบนารี [wasm-tools print] metadata-show [ตัวเลือก] [โมดูล] แยกข้อมูลเมตาของผู้ผลิตสำหรับ Wasm binary [wasm-tools metadata show] เพิ่มข้อมูลเมตา [ตัวเลือก] [โมดูล] เพิ่มข้อมูลเมตาของผู้ผลิตสำหรับไบนารี Wasm [เพิ่มข้อมูลเมตาของเครื่องมือ wasm] แยก [ตัวเลือก] <input> แยกวิเคราะห์รูปแบบข้อความ Wasm เป็นไฟล์ไบนารี [wasm-tools แยกวิเคราะห์] ใหม่ [ตัวเลือก] <core-module> สร้างส่วนประกอบ WebAssembly ที่ดัดแปลงมาจากแกนส่วนประกอบ Wasm [ส่วนประกอบ wasm-tools ใหม่] ฝัง [ตัวเลือก] [โมดูลหลัก] ฝังส่วนการพิมพ์ส่วนประกอบลงในโมดูล Wasm หลัก [ส่วนประกอบเครื่องมือ wasm ฝัง] ช่วย [คำสั่ง] แสดงความช่วยเหลือสำหรับคำสั่ง
หากต้องการความช่วยเหลือเกี่ยวกับตัวเลือกคำสั่งแต่ละรายการ ให้ใช้ jco <cmd> --help
ดู Transpiling Docs สำหรับข้อมูลพื้นฐานและข้อมูลเพิ่มเติม
หากต้องการเรียกเข้าสู่การ transpilation โดยตรงใน Rust นั้น bindgen ที่ใช้ใน Jco ก็ยังมีอยู่ใน crates.io ในชื่อ js-component-bindgen
สำหรับคอมโพเนนต์ Wasm ที่ใช้โลกคำสั่ง WASI จะมียูทิลิตี้ jco run
เพื่อรันแอปพลิเคชันเหล่านี้ใน Node.js
jco run cowasy.component.wasm hello
เมื่อใช้ Preview2-shim WASI จะทำให้สามารถเข้าถึงระบบพื้นฐานพื้นฐานได้อย่างเต็มที่ รวมถึงการอนุญาตระบบไฟล์และตัวแปรสภาพแวดล้อม
สำหรับส่วนประกอบ HTTP Proxy นั้น jco serve
จัดเตรียมการใช้งานเซิร์ฟเวอร์ JS:
jco serve --port 8080 server.wasm
โดยทั่วไป Wasmtime จัดเตรียมการใช้งานที่มีประสิทธิภาพสูงสุดสำหรับการดำเนินการคำสั่งและโลกพร็อกซีที่จะใช้ การใช้งานเหล่านี้มีไว้สำหรับเมื่อจำเป็นต้องใช้การจำลองเสมือนของ JS หรือแนวทางที่สะดวกที่สุด
หมายเหตุ :
jco componentize
ถือเป็นการทดลอง และการเปลี่ยนแปลงที่ไม่สมบูรณ์อาจดำเนินการได้โดยไม่ต้องแจ้งให้ทราบล่วงหน้า
ในการคอมโพเนนต์ไฟล์ JS ให้รัน:
jco componentize app.js --wit wit -n world-name -o component.wasm
สร้างส่วนประกอบจากโมดูล JS ที่ใช้คำจำกัดความของโลก WIT ผ่านการฝังเอ็นจิ้น Spidermonkey
ดู ComponentizeJS สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับกระบวนการนี้
transpile(component: Uint8Array, opts?): Promise<{ files: Record<string, Uint8Array> }>
Transpile องค์ประกอบเป็น JS
opt(component: Uint8Array, opts?): Promise<{ component: Uint8Array }>
ปรับส่วนประกอบให้เหมาะสมด้วยโปรเจ็กต์ Binaryen Wasm-opt
componentWit(component: Uint8Array, document?: string): string
แยกโลก WIT ออกจากไบนารีส่วนประกอบ
print(component: Uint8Array): string
พิมพ์ WAT สำหรับไบนารีคอมโพเนนต์
metadataShow(wasm: Uint8Array): Metadata
แยกข้อมูลเมตาของห่วงโซ่เครื่องมือของผู้ผลิตสำหรับส่วนประกอบและโมดูลที่ซ้อนกัน
parse(wat: string): Uint8Array
แยกวิเคราะห์องค์ประกอบ WAT เพื่อส่งออกไบนารีคอมโพเนนต์
componentNew(coreWasm: Uint8Array | null, adapters?: [String, Uint8Array][]): Uint8Array
เครื่องมือสร้างคอมโพเนนต์ "WIT Component" เป็นทางเลือกในการจัดเตรียมชุดของไบนารีอะแด็ปเตอร์ที่มีชื่อ
componentEmbed(coreWasm: Uint8Array | null, wit: String, opts?: { stringEncoding?, dummy?, world?, metadata? }): Uint8Array
เครื่องมือฝังส่วนประกอบ "WIT Component" สำหรับการฝังประเภทส่วนประกอบลงในไบนารีหลัก เป็นกรณีการใช้งานขั้นสูงของการสร้างส่วนประกอบ
metadataAdd(wasm: Uint8Array, metadata): Uint8Array
เพิ่มข้อมูลเมตาของผู้ผลิตใหม่ให้กับคอมโพเนนต์หรือไบนารี Wasm หลัก
ดูบทที่มีส่วนร่วมของหนังสือ Jco
โครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต Apache 2.0 โดยมีข้อยกเว้น LLVM ดูใบอนุญาตสำหรับรายละเอียดเพิ่มเติม
เว้นแต่คุณจะระบุไว้เป็นอย่างอื่นอย่างชัดเจน การสนับสนุนใดๆ ที่คุณส่งมาเพื่อรวมในโครงการนี้โดยเจตนาตามที่กำหนดไว้ในใบอนุญาต Apache-2.0 จะต้องได้รับอนุญาตตามที่กล่าวไว้ข้างต้น โดยไม่มีข้อกำหนดหรือเงื่อนไขเพิ่มเติมใดๆ