Dieser Fracht-Unterbefehl zielt darauf ab, es einfach und bequem zu machen, clientseitige Webanwendungen in Rost zu erstellen, zu entwickeln und bereitzustellen.
Diese Software wurde Ihnen dank dieser wunderbaren Menschen zu Ihnen gebracht:
Danke schön!
Derzeit unterstützt es die folgenden Funktionen:
cargo web build - Erstellt Ihr Projekt mit einem der drei Web -Backends von Rust:--target=wasm32-unknown-unknown--target=wasm32-unknown-emscripten )--target=asmjs-unknown-emscripten )cargo web check - wird Ihr Projekt typisierencargo web test - führt Ihre Tests entweder unter:--nodejs )cargo web start - Erstellt Ihr Projekt, starten Sie einen eingebetteten Webserver und baut es bei Bedarf kontinuierlich um. Unterstützt das automatische Nachladen mit --auto-reload .cargo web deploy - Erstellt Ihr Projekt und emittet alle erforderlichen Dateien, damit Sie sie problemlos statisch bedienen können.rustup Es ist auch sehr empfohlen, die STDWeb -Kiste zu überprüfen, wenn Sie in Ihrem Projekt mit der JavaScript -Welt interagieren möchten. (In der Tat ist cargo-web es möglich, stdweb js! Macro auf dem nativen Backend von Rusts WebAssembly zu verwenden.)
$ cargo install cargo-web
Upgrade:
$ cargo install --force cargo-web
Oder klonen und bauen Sie mit $ cargo build --release Sie dann in Ihren $ path.
Unter Linux kann die Installation mit einer Nachricht fehlschlagen, dass sie OpenSSL nicht finden kann. In diesem Fall müssen Sie das -dev -Paket für OpenSSL höchstwahrscheinlich aus den Repositorys Ihrer Verteilung installieren. (Auf Ubuntu heißt es libssl-dev .)
Web.toml cargo-web verfügt über eine eigene Konfigurationsdatei, die Sie neben cargo von Cargo.toml einsetzen können.
Hier ist eine Beispielkonfiguration, die jeden unterstützten Schlüssel zeigt:
# 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 " Wenn Sie externe Kisten mit einem Web.toml verwenden, lädt cargo-web es und verwendet es.
Ein paar Einschränkungen in Bezug auf das Web.toml :
prepend-js haben. Sie können entweder einen einzelnen globalen prepend-js oder mehrere pro-Ziele definieren.link-args können derzeit keine Räume haben.cargo-web die Web.toml Dateien aus mehreren Kisten verarbeitet, ist deterministisch und dennoch nicht spezifiziert. Dies bedeutet, dass Sie sich in keiner Weise von dieser Reihenfolge verlassen sollten. Alle statischen Dateien, die Sie beim Ausführen cargo web start oder Bereitstellung bei der Ausführung cargo web deploy in ein Verzeichnis namens static im Root Ihrer Kiste erhalten möchten. Standardmäßig sind statische Artefakte standardmäßig erforderlich. Eine index.html -Datei wird automatisch für Sie generiert, wenn sie fehlt. Sie können natürlich Ihre eigene static/index.html -Datei einsetzen. In diesem Fall wird sie anstelle der autogenerierten Verwendung verwendet.
cargo-web während der Zusammenstellung erkennen Wenn Sie während der Zusammenstellung feststellen möchten, dass Ihr Projekt mit cargo-web erstellt wird, können Sie die Umgebungsvariable COMPILING_UNDER_CARGO_WEB überprüfen, die auf 1 eingestellt werden.
cargo-web auf Travis Sie können das folgende Skript verwenden, um das neueste cargo-web herunterzuladen und zu installieren:
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 Standardmäßig werden cargo web test Ihre Tests unter kopflosen Chrom ausführen. Um dies auf Travis verwenden zu können, müssen Sie so etwas zu Ihrem .travis.yml hinzufügen:
addons :
chrome : stable wasm32-unknown-unknown -Nur) Wenn Sie standardmäßig ein Projekt erstellen, generiert cargo-web eine eigenständige Laufzeit-Laufzeit für Sie. Dies bedeutet, dass die generierte .js -Datei sofort in ein <script> -Tag oder mit node.js gestartet werden kann, ohne es manuell laden zu müssen oder etwas mehr zu tun. Dies beschränkt Sie jedoch, wenn es um die Anpassbarkeit geht.
Wenn Sie ein wenig mehr Kontrolle darüber haben möchten, wie Ihr Modul geladen wird, können Sie cargo-web sagen, dass Sie mit der Option --runtime library-es6 ein nicht standelsbibliotheksähnliches Modul) generieren sollen. Dies führt zu einer .js -Datei, die eine Fabrikfunktion mit der folgenden Schnittstelle exportiert:
export default function ( ) {
return {
imports : { ... } ,
initialize : function ( instance ) { ... }
} ;
} Hier müssen Sie das WebAssembly -Modul selbst instanziieren. In diesem Fall müssen Sie imports als Importe verabschieden und dann unmittelbar nach dem Instanziieren von initialize .
Angenommen, Sie nennen Ihr vom cargo-web generierter Modul als my-module.mjs und my-module.wasm .
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 ) ) ; Dann können Sie es mit node --experimental-modules run.mjs .
Dies ist nützlich, wenn Sie Ihre .wasm -Datei aus einer benutzerdefinierten URL laden möchten oder die Ausgabe in einen JavaScript -Bundler oder etwas anderes integrieren möchten, bei dem Sie das Modul selbst laden müssen.
0.6.26--no-default-features wurde festgelegtmime-guess wird jetzt verwendet, um die Mime-Typen vom eingebetteten Webserver zu erraten0.6.25cargo web start wird nun versuchen, überflüssige Umbauten nicht auszulösen, wenn die Dateien des Projekts in kurzer Nachfolge geändert werden0.6.24[target.'cfg(...)'.dependencies] werden jetzt ordnungsgemäß unterstütztcfg(cargo_web) verwenden, um zu erkennen, wann immer Ihre Kiste unter cargo-web zusammengestellt wirdtarget/wasm32-unknown-unknown/*/deps/*.wasm jetzt ignoriert; Dies sollte verhindern, dass cargo-web cdylib .wasmcargo-web ist jetzt als Bibliothek über eine structopt Schnittstelle erhältlich0.6.23cargo web checkwasm32-unknown-unknown Ziel ist jetzt der Standard0.6.22deploy nun mit dem Bereitstellen mit dem Parameter -o / --output , der bereitgestellt werden sollAccess-Control-Allow-Origin: * wird jetzt immer vom eingebetteten Webserver gesendetwasm32-unknown-unknown werden jetzt unterstützt, sofern kürzlich genügend stdweb verwendet wird0.6.211.38.19 aktualisiert; Die EMSCIPTEN-basierten Ziele sollten nun wieder abends funktionierenwasm32-unknown-unknown sind jetzt sortiertwasm32-unknown-unknown entfernt0.6.20cargo install sollte jetzt wieder funktionierendeploy sollte nicht in Panik geraten, wenn es kein gültiges Ziel findet0.6.19cargo install sollte jetzt kompilieren, anstatt in einigen Umgebungen zu fehlern1.26.20.6.18index.html hat vor seinem DocType keine neue Zeile mehr0.6.171.25.00.6.16wasm32-unknown-unknown verwendet jetzt WebAssembly.instantiateStreaming , sofern verfügbarwasm32-unknown-unknown Ziel unterstütztcargo-web umgeleitet wirdLizenziert unter einem von
nach Ihrer Option.
Sofern Sie nicht ausdrücklich anders angeben, ist ein Beitrag, der absichtlich zur Aufnahme in die Arbeit von Ihnen eingereicht wird, wie in der Apache-2.0-Lizenz definiert, ohne zusätzliche Bedingungen doppelt lizenziert wie oben.