Este subcomando de carga pretende tornar fácil e conveniente criar, desenvolver e implantar aplicativos da Web do lado do cliente escritos em Rust.
Este software foi trazido a você graças a essas pessoas maravilhosas:
Obrigado!
Atualmente, ele suporta os seguintes recursos:
cargo web build - criará seu projeto usando um dos três back -ends da Rust:--target=wasm32-unknown-unknown ; Padrão)--target=wasm32-unknown-emscripten )--target=asmjs-unknown-emscripten )cargo web check - Vestará o seu projetocargo web test - executará seus testes em:--nodejs )cargo web start - criará seu projeto, iniciará um servidor da web incorporado e a reconstruirá continuamente, se necessário; Suporta recarga automática com --auto-reload .cargo web deploy - criará seu projeto e emitirá todos os arquivos necessários para que você possa atendê -los facilmente estaticamente.rustup Também é altamente recomendável que você consulte a caixa Stdweb se deseja interagir com o mundo JavaScript em seu projeto. (De fato, cargo-web é o que torna possível usar o js! Macro do stdweb no back-end da WebAssembly de Rust.)
$ cargo install cargo-web
Para atualizar:
$ cargo install --force cargo-web
Ou clonar e construir com $ cargo build --release em seguida, coloque -o no seu $ PATH.
No Linux, a instalação pode falhar com uma mensagem que não consegue encontrar o OpenSSL; nesse caso, você provavelmente precisa instalar o pacote -dev para o OpenSSL a partir dos repositórios da sua distribuição. (No Ubuntu, é chamado libssl-dev .)
Web.toml cargo-web possui seu próprio arquivo de configuração, que você pode colocar ao lado da cargo da Cargo.toml .
Aqui está um exemplo de configuração mostrando todas as chaves suportadas:
# 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 " Se você usar alguma caixa externa que possua uma Web.toml , cargo-web o carregará e o usará.
Algumas restrições sobre o Web.toml :
prepend-js sobrepostas. Você pode definir um único prepend-js global, ou vários por alvo.link-args não podem ter nenhum espaço.cargo-web processará os arquivos Web.toml de várias caixas é determinística, mas não especificada. Isso significa que você não deve depender dessa ordem de forma alguma. Quaisquer arquivos estáticos que você gostaria de servir ao executar cargo web start ou implantada ao executar cargo web deploy pode ser colocada em um diretório chamado static na raiz do seu caixote. Nenhum artefato estático é necessário por padrão; Um arquivo index.html será gerado automaticamente para você, se estiver faltando. É claro que você pode colocar seu próprio arquivo static/index.html ; nesse caso, ele será usado em vez do autogenerado.
cargo-web durante a compilação Se durante a compilação, você deseja detectar que seu projeto estiver sendo construído com cargo-web você pode verificar a variável de ambiente COMPILING_UNDER_CARGO_WEB , que será definida como 1 .
cargo-web em Travis Você pode usar o script a seguir para baixar e instalar a ú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 padrão, cargo web test executará seus testes no Chrome sem cabeça. Para poder usar isso no Travis, você precisa adicionar algo assim ao seu .travis.yml :
addons :
chrome : stable wasm32-unknown-unknown -Only) Ao criar um projeto por padrão cargo-web gera um tempo de execução independente para você. O que isso significa é que o arquivo .js que é gerado pode ser imediatamente colocado dentro de uma tag <script> ou lançado com node.js sem precisar carregá -la manualmente ou fazer nada extra, no entanto, isso o limita quando se trata de personalização.
Se você quiser ter um pouco mais de controle sobre como o seu módulo é carregado, pode dizer à cargo-web para gerar um módulo não padrão do tipo biblioteca para você com a opção --runtime library-es6 . Isso resultará em um arquivo .js que exporta uma função de fábrica com a seguinte interface:
export default function ( ) {
return {
imports : { ... } ,
initialize : function ( instance ) { ... }
} ;
} Aqui você precisa instanciar o módulo WebAssembly; Nesse caso, você deve passar imports como suas importações e, em seguida, imediatamente após instanciar a chamada initialize .
Por exemplo, supondo que você nomeie o seu módulo gerado pela cargo-web como my-module.mjs e my-module.wasm você pode instanciá-lo assim do 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 ) ) ; Em seguida, você pode executá-lo com node --experimental-modules run.mjs .
Isso é útil se você deseja carregar seu arquivo .wasm de um URL personalizado ou deseja integrar a saída com um empurrador JavaScript, ou qualquer outra coisa que exige que você carregue o módulo sozinho.
0.6.26--no-default-features foi fixamime-guess CRATE agora está sendo usado para adivinhar os tipos MIME pelo servidor da web incorporado0.6.25cargo web start agora tentará não desencadear reconstruções supérfluas quando os arquivos do projeto forem modificados em sucessão rápida0.6.24[target.'cfg(...)'.dependencies] agora são adequadamente suportadascfg(cargo_web) para detectar sempre que sua caixa está sendo compilada em cargo-webtarget/wasm32-unknown-unknown/*/deps/*.wasm agora é ignorada; Isso deve impedir que cargo-web de processamento cdylib .wasmcargo-web está agora disponível como uma biblioteca através de uma interface baseada em structopt0.6.23cargo web checkwasm32-unknown-unknown agora é o padrão0.6.22deploy agora pode ser informado de onde implantar usando o parâmetro -o / --outputAccess-Control-Allow-Origin: * agora é sempre enviado pelo servidor da web incorporadowasm32-unknown-unknown agora são suportados, desde que um stdweb recente o suficiente seja usado0.6.211.38.19 ; Os alvos baseados em EMScriptten agora devem funcionar novamente no Nightlywasm32-unknown-unknown agora estão classificadoswasm32-unknown-unknown0.6.20cargo install agora deve funcionar novamentedeploy não deve entrar em pânico quando não encontrar um alvo válido0.6.19cargo install agora deve ser compilada em vez de falhar em alguns ambientes1.26.20.6.18index.html não tem uma nova linha antes de seu doctype0.6.171.25.00.6.16wasm32-unknown-unknown agora usa WebAssembly.instantiateStreaming quando disponívelwasm32-unknown-unknowncargo-web é redirecionadaLicenciado sob qualquer um de
por sua opção.
A menos que você declare explicitamente o contrário, qualquer contribuição enviada intencionalmente para inclusão no trabalho por você, conforme definido na licença Apache-2.0, será licenciado como acima, sem termos ou condições adicionais.