この貨物のサブコマンドは、Rustで記述されたクライアント側のWebアプリケーションの構築、開発、展開に簡単かつ便利にすることを目指しています。
このソフトウェアは、これらの素晴らしい人々のおかげであなたにもたらされました:
ありがとう!
現在、次の機能をサポートしています。
cargo web build - Rustの3つのWebバックエンドのいずれかを使用してプロジェクトを構築します。--target=wasm32-unknown-unknown ; default)--target=wasm32-unknown-emscripten )--target=asmjs-unknown-emscripten )cargo web check - プロジェクトをタイプチェックしますcargo web test - 以下のテストを実行します。--nodejs )cargo web start - プロジェクトを構築し、組み込みWebサーバーを開始し、必要に応じて継続的に再構築します。 --auto-reloadで自動リロードをサポートします。cargo web deployプロジェクトを構築し、必要なファイルをすべてエミントして、静的に簡単に提供できるようにします。rustupを介して関連するRustターゲットを自動的にインストールしますまた、プロジェクトのJavaScriptの世界とやり取りしたい場合は、STDWEBクレートをチェックすることを強くお勧めします。 (実際、 cargo-web RustのネイティブWebAssemblyバックエンドでstdwebのjs!マクロを使用することを可能にするものです。)
$ cargo install cargo-web
アップグレードするには:
$ cargo install --force cargo-web
または、 $ cargo build --releaseから$パスに配置します。
Linuxでは、OpenSSLが見つからないというメッセージでインストールが失敗する可能性があります。その場合、配布のリポジトリからOpenSSL用の-devパッケージをインストールする必要があります。 (ubuntuでは、 libssl-devと呼ばれています。)
Web.toml cargo-webは独自の構成ファイルがあり、 cargoの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でこれを使用できるようにするには、 .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で実行できます。
これは、カスタムURLから.wasmファイルをロードする場合、または出力をJavaScriptバンドラーと統合する場合、またはモジュールを自分でロードする必要がある他のものを統合する場合に役立ちます。
0.6.26--no-default-featuresフラグは修正されましたmime-guess Crateは現在、埋め込まれたWebサーバーによってMimeタイプを推測するために使用されています0.6.25cargo web start 、プロジェクトのファイルが迅速に変更されたときに、余分な再構築をトリガーしないようにします。0.6.24[target.'cfg(...)'.dependencies]が適切にサポートされていますcfg(cargo_web)を使用して、 cargo-webの下でクレートがコンパイルされているときはいつでも検出できます。target/wasm32-unknown-unknown/*/deps/*.wasm一致させるアーティファクトは、現在無視されています。これにより、依存関係がcdylib sであるために生成された貨物cargo-web不必要な.wasmアーティファクトを処理するのを防ぐはずですcargo-web 、 structoptベースのインターフェイスを介してライブラリとして利用可能になりました0.6.23cargo web checkwasm32-unknown-unknownターゲットがデフォルトになりました0.6.22deploy Subcommandは、 -o / --outputパラメーターを使用して展開する場所を伝えることができますAccess-Control-Allow-Origin: *は常に埋め込まれたWebサーバーによって常に送信されますwasm32-unknown-unknownのデバッグビルドがサポートされていますstdweb0.6.211.38.19に更新されました。 Emscriptenベースのターゲットは、毎晩再び動作するはずですwasm32-unknown-unknownの下での輸入品がソートされましたwasm32-unknown-unknownのために、本当に古いナイトリーとの互換性が削除されました0.6.20cargo installを介した設置は、再度動作するはずですdeployパニックにならないでください0.6.19cargo install 、一部の環境で故障する代わりにコンパイルする必要があります1.26.2になりました0.6.18index.html 、そのdoctypeの前に新しいラインを持っていません0.6.171.25.0なりました0.6.16wasm32-unknown-unknownのランタイムは、利用可能な場合はWebAssembly.instantiateStreamingを使用しますwasm32-unknown-unknownターゲットに対してサポートされていますcargo-webの出力がリダイレクトされたときに、カラーコードは放出されなくなりましたいずれかの下でライセンスされています
あなたのオプションで。
明示的に特に述べない限り、Apache-2.0ライセンスで定義されているように、お客様による仕事に含めるために意図的に提出された貢献は、追加の条件なしで、上記のように二重ライセンスを取得するものとします。