Este subcomando de carga tiene como objetivo facilitar y conveniente construir, desarrollar e implementar aplicaciones web del lado del cliente escritas en óxido.
Este software fue traído a usted gracias a estas maravillosas personas:
¡Gracias!
Actualmente admite las siguientes funciones:
cargo web build : construirá su proyecto utilizando uno de los tres backends web de Rust:--target=wasm32-unknown-unknown ; predeterminado)--target=wasm32-unknown-emscripten )--target=asmjs-unknown-emscripten )cargo web check : TypecheCheck su proyectocargo web test : ejecutará sus pruebas en:--nodejs )cargo web start : construirá su proyecto, iniciará un servidor web integrado y lo reconstruirá continuamente si es necesario; Admite la recarga automática con --auto-reload .cargo web deploy : construirá su proyecto y emitirá todos los archivos necesarios para que pueda servirlos fácilmente estáticamente.rustup También se recomienda encarecidamente que consulte la caja de stdweb si desea interactuar con el mundo de JavaScript en su proyecto. (De hecho, cargo-web es lo que hace posible usar stdweb 's js! Macro en el backend nativo de Rust WebAssembly).
$ cargo install cargo-web
Para actualizar:
$ cargo install --force cargo-web
O Clon y construir con $ cargo build --release y luego coloque en su ruta $.
En Linux, la instalación puede fallar con un mensaje que no puede encontrar OpenSSL, en cuyo caso lo más probable es que necesite instalar el paquete -dev para OpenSSL desde los repositorios de su distribución. (En Ubuntu se llama libssl-dev .)
Web.toml cargo-web tiene su propio archivo de configuración que puede poner junto a cargo de Cargo.toml .
Aquí hay una configuración de ejemplo que muestra cada clave compatible:
# 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 " Si usa cajas externas que tengan un Web.toml , cargo-web lo cargará y lo usará.
Algunas restricciones sobre el Web.toml :
prepend-js superpuestas. Puede definir un único prepend-js global o múltiples por objetivo.link-args actualmente no puede tener ningún espacio en ellos.cargo-web procesará los archivos Web.toml de múltiples cajas es determinista pero no especificado. Esto significa que no debe depender de este orden de ninguna manera. Cualquier archivo estático a los que le gustaría haber servido al ejecutar cargo web start o implementado al ejecutar cargo web deploy se puede colocar en un directorio llamado static en la raíz de su caja. No se requieren artefactos estáticos de forma predeterminada; Un archivo index.html se generará automáticamente para usted si falta. Puede, por supuesto, colocar su propio archivo static/index.html , en cuyo caso se usará en lugar del autogenerado.
cargo-web durante la compilación Si durante la compilación le gustaría detectar que su proyecto se está construyendo con cargo-web puede verificar la variable de entorno COMPILING_UNDER_CARGO_WEB , que se establecerá en 1 .
cargo-web en Travis Puede usar el siguiente script para descargar e instalar la última 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 Por defecto, cargo web test ejecutará sus pruebas en Chrome sin cabeza. Para poder usar esto en Travis, debe agregar algo como esto a su .travis.yml :
addons :
chrome : stable wasm32-unknown-unknown -solo) Al construir un proyecto, por defecto, cargo-web genera un tiempo de ejecución independiente para usted. Lo que esto significa es que el archivo .js que se genera se puede colocar inmediatamente dentro de una etiqueta <script> o lanzarse con Node.js sin tener que cargarlo manualmente o hacer algo extra, sin embargo, esto lo limita cuando se trata de personalización.
Si desea tener un poco más de control sobre cómo se carga su módulo, puede decirle a cargo-web que genere un módulo de biblioteca no estandalona para usted con la opción --runtime library-es6 . Esto dará como resultado un archivo .js que exporta una función de fábrica con la siguiente interfaz:
export default function ( ) {
return {
imports : { ... } ,
initialize : function ( instance ) { ... }
} ;
} Aquí tienes que instanciar el módulo WebAssembly tú mismo; En este caso, debe aprobar imports como sus importaciones, y luego inmediatamente después de instancias de instancias initialize .
Por ejemplo, suponiendo que nombrará su módulo generado por la cargo-web como my-module.mjs y my-module.wasm puede instanciarlo así desde 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 ) ) ; Luego puede ejecutarlo con node --experimental-modules run.mjs .
Esto es útil si desea cargar su archivo .wasm desde una URL personalizada o si desea integrar la salida con un Bundler JavaScript, o cualquier otra cosa que requiera que cargue el módulo usted mismo.
0.6.26--no-default-features fue fijamime-guess ahora se está utilizando para adivinar los tipos de MIME por el servidor web integrado0.6.25cargo web start ahora intentará no activar reconstrucciones superfluas cuando los archivos del proyecto se modifiquen en rápida sucesión0.6.24[target.'cfg(...)'.dependencies] ahora se admiten adecuadamentecfg(cargo_web) para detectar cada vez que su caja se compila en cargo-webtarget/wasm32-unknown-unknown/*/deps/*.wasm ahora se ignoran; Esto debería evitar que cargo-web procese los artefactos superfluos .wasm generados debido a que las dependencias también son cdylib Scargo-web ahora está disponible como una biblioteca a través de una interfaz basada en structopt0.6.23cargo web checkwasm32-unknown-unknown es ahora el valor predeterminado0.6.22deploy ahora dónde implementar usando el parámetro -o / --outputAccess-Control-Allow-Origin: * Ahora siempre es enviado por el servidor web integradowasm32-unknown-unknown ahora se admite siempre que se use un stdweb lo suficientemente reciente0.6.211.38.19 ; Los objetivos basados en Emscripten ahora deberían funcionar nuevamente en la nochewasm32-unknown-unknown ahora están ordenadoswasm32-unknown-unknown0.6.20cargo install ahora debería funcionar nuevamentedeploy no debe entrar en pánico cuando no encuentra un objetivo válido0.6.19cargo install ahora debe compilar en lugar de fallar en algunos entornos1.26.20.6.18index.html ya no tiene una nueva línea antes de su doctype0.6.171.25.00.6.16wasm32-unknown-unknown ahora usa WebAssembly.instantiateStreamingwasm32-unknown-unknowncargo-webCon licencia bajo cualquiera de
a tu opción.
A menos que declare explícitamente lo contrario, cualquier contribución presentada intencionalmente para su inclusión en el trabajo por usted, como se define en la licencia Apache-2.0, se debe tener doble licencia como se indicó anteriormente, sin ningún término o condiciones adicionales.