Эта грузовая подкоманда направлена на то, чтобы сделать легко и удобно создавать, разрабатывать и развернуть веб-приложения на стороне клиента, написанные в Rust.
Это программное обеспечение было принесено вам благодаря этим замечательным людям:
Спасибо!
В настоящее время он поддерживает следующие функции:
cargo web build - создаст ваш проект, используя один из трех бэкэндов Rust's:--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, если вы хотите взаимодействовать с World JavaScript в своем проекте. (На самом деле, cargo-web -это то, что позволяет использовать макрос stdweb js! На нативном бэкэнде Rust's Webassembly.)
$ 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 . Вы можете определить один глобальный 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 будет запускать ваши тесты под головным хромом. Чтобы иметь возможность использовать это на Трэвисе, вам нужно добавить что -то подобное в свой .travis.yml :
addons :
chrome : stable wasm32-unknown-unknown -только) При создании проекта по умолчанию 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 -адреса или хотите интегрировать выход с помощью GavaScript Bundler или чего -либо еще, что требует от вас загрузить модуль самостоятельно.
0.6.26--no-default-features был зафиксированmime-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 cdylib лишних артефактов .wasmcargo-web теперь доступен в виде библиотеки через интерфейс на основе structopt0.6.23cargo web checkwasm32-unknown-unknown Target теперь является дефолтом0.6.22deploy может быть сказано, где развернуть с помощью параметра -o / --outputAccess-Control-Allow-Origin: * теперь всегда отправляется встроенным веб-серверомwasm32-unknown-unknown теперь поддерживается при условии, что используется достаточно недавний stdweb0.6.211.38.19 ; Целевые показатели на основе Emscripten теперь должны снова работать по ночамwasm32-unknown-unknown теперь отсортированыwasm32-unknown-unknown0.6.20cargo install должна снова работатьdeploy не должно паниковать, когда не найдет действительную цель0.6.19cargo install теперь должна компилироваться вместо того, чтобы терпеть неудачу в некоторых средах1.26.20.6.18index.html по умолчанию. Html больше не имеет новой линии перед его документом0.6.171.25.00.6.16wasm32-unknown-unknown теперь использует WebAssembly.instantiateStreaming , когда доступноwasm32-unknown-unknowncargo-webЛицензирован под одним из
на вашем варианте.
Если вы явно не заявляете иное, какой-либо вклад, преднамеренно предназначенный для включения в работу вами, как определено в лицензии Apache-2.0, должен быть двойной лицензией, как указано выше, без каких-либо дополнительных условий или условий.