يهدف هذا المفصل الفرعي للشحن إلى تسهيل إنشاء تطبيقات ويب من جانب العميل وتطويرها ونشرها.
تم تقديم هذا البرنامج إليك بفضل هؤلاء الأشخاص الرائعين:
شكرًا لك!
حاليا يدعم الميزات التالية:
cargo web build - ستقوم ببناء مشروعك باستخدام واحدة من خلفية الويب الثلاثة لـ Rust:--target=wasm32-unknown-unknown ؛ الافتراضي)--target=wasm32-unknown-emscripten )--target=asmjs-unknown-emscripten )cargo web check - سوف typecheck مشروعكcargo web test - سيتم تشغيل اختباراتك إما تحت:--nodejs )cargo web start - ستقوم ببناء مشروعك ، وبدء خادم ويب مضمن وسيقوم باستمرار بإعادة بنائه إذا لزم الأمر ؛ يدعم إعادة التحميل التلقائي مع- --auto-reload .cargo web deploy - بناء مشروعك وإبعاد جميع الملفات اللازمة بحيث يمكنك بسهولة تقديمها بشكل ثابت.rustup يوصى بشدة أيضًا بالتحقق من صندوق STDWEB إذا كنت ترغب في التفاعل مع عالم JavaScript في مشروعك. (في الواقع ، cargo-web هي ما يجعل من الممكن استخدام MACRO من stdweb 's js!
$ cargo install cargo-web
للترقية:
$ cargo install --force cargo-web
أو استنساخ وبناء مع $ cargo build --release ثم ضعه في مسار $ الخاص بك.
في Linux ، يمكن أن يفشل التثبيت برسالة مفادها أنه لا يمكن العثور على OpenSSL ، وفي هذه الحالة ، من المحتمل أن تحتاج إلى تثبيت حزمة -dev لـ OpenSSL من مستودعات التوزيع الخاصة بك. (على Ubuntu يسمى libssl-dev .)
Web.toml يحتوي cargo-web على ملف التكوين الخاص به والذي يمكنك وضعه بجانب cargo 's Cargo.toml .
فيما يلي مثال يوضح كل مفتاح مدعوم:
# 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 متداخلة. يمكنك إما تحديد Global prepend-js ، أو متعددة لكل هدف.link-args حاليًا أي مسافات فيها.cargo-web على معالجة ملفات Web.toml . هذا يعني أنه يجب ألا تعتمد على هذا الترتيب بأي شكل من الأشكال. يمكن وضع أي ملفات ثابتة تود أن تخدمها عند تشغيل cargo web start أو تم نشرها عند تشغيل cargo web deploy في دليل يسمى static في جذر قفصك. لا مطلوب من القطع الأثرية الثابتة افتراضيا. سيتم إنشاء ملف index.html تلقائيًا إذا كان مفقودًا. يمكنك ، بالطبع ، وضع ملف static/index.html الخاص بك ، وفي هذه الحالة سيتم استخدامه بدلاً من ملف المولد التلقائي.
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 Headless. لتكون قادرًا على استخدام هذا على Travis ، تحتاج إلى إضافة شيء مثل هذا إلى .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 مخصص أو تريد دمج الإخراج مع Bundler JavaScript ، أو أي شيء آخر يتطلب منك تحميل الوحدة بنفسك.
0.6.26--no-default-featuresmime-guess لتخمين أنواع MIME بواسطة خادم الويب المدمج0.6.25cargo web start عدم تشغيل عمليات إعادة بناء غير ضرورية عندما يتم تعديل ملفات المشروع في تتابع سريع0.6.24[target.'cfg(...)'.dependencies] مدعومة الآن بشكل صحيحcfg(cargo_web) لاكتشاف كلما تم تجميع قفصك تحت cargo-webtarget/wasm32-unknown-unknown/*/deps/*.wasm ؛ هذا يجب أن يمنع cargo-web من معالجة القطع .wasm التي تم إنشاؤها بسبب التبعيات أيضًا كونها cdylib scargo-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-unknownwasm32-unknown-unknown0.6.20cargo install مرة أخرىdeploy الذعر عندما لا يجد هدفًا صالحًا0.6.19cargo install بدلاً من الفشل في بعض البيئات1.26.20.6.18index.html الافتراضي لم يعد لديه سطر جديد قبل Doctype بعد الآن0.6.171.25.00.6.16wasm32-unknown-unknown الآن WebAssembly.instantiateStreaming عندما يكون متاحًاwasm32-unknown-unknowncargo-webمرخصة تحت أي من
في خيارك.
ما لم تقل صراحةً خلاف ذلك ، فإن أي مساهمة تم تقديمها عن عمد لإدراجها في العمل بواسطتك ، كما هو محدد في ترخيص Apache-2.0 ، تكون مرخصة مزدوجة على النحو الوارد أعلاه ، دون أي شروط أو شروط إضافية.