Rust × WebAssembly 項目腳手架詳解

一、模板概覽

模板生成方式核心用途典型角色
wasm-pack-templatecargo generate …Rust 代碼 打包成 npm 庫「底層算法/組件」作者
create-wasm-appnpm init wasm-app構建純 JS/TS 項目,消費上面生成的 npm 包Web 前端/Node 服務
rust-webpack-templatenpm init rust-webpack自帶 Webpack & rust-loader,前端與 Rust 熱編譯一體同 repo 混合開發

一句話理解

  • wasm-pack-template 造輪子,輸出 .wasm + JS 包裝器
  • create-wasm-app 裝輪子,專注業務邏輯
  • rust-webpack-template 把「造輪子 + 裝輪子」合并到一個工程里,適合迅速原型

二、wasm-pack-template——“Rust → npm”的起點

1. 快速上手

cargo install cargo-generate              # 若未安裝
cargo generate \--git https://github.com/rustwasm/wasm-pack-template.git \--name my-wasm-lib
cd my-wasm-lib
wasm-pack build --release --target bundler

生成目錄結構:

my-wasm-lib/
├── src/lib.rs          # 寫 Rust 邏輯
├── Cargo.toml
└── pkg/                # wasm-pack 輸出:.wasm + JS 包裝文件

2. 關鍵特性

  • wasm-bindgen 已接入#[wasm_bindgen] 讓 Rust 函數暴露給 JS
  • 測試與 CI 模板:開箱集成 wasm-bindgen-test、GitHub Action
  • TypeScript 類型聲明pkg/*.d.ts 自動生成,IDE 友好
  • npm publishwasm-pack publish 秒發 npm

3. 與 JS 項目聯調

cd my-wasm-lib
npm link            # 全局軟鏈cd ../front-app
npm link my-wasm-lib

即可在前端代碼里 import init, { foo } from 'my-wasm-lib'

三、create-wasm-app——“JS 消費 wasm 庫”的最佳拍檔

1. 初始化

mkdir front-app && cd $_
npm init wasm-app    # 交互式選擇:JS / TS、打包工具等
npm install          # 裝依賴
npm run start        # 本地 dev server,自動加載 .wasm

2. 項目亮點

  • 零配置加載 wasm:腳手架已注入 init() + await 處理
  • 支持 TS:可直接 import type 的 d.ts
  • vite / webpack / parcel 多框架可選(新版本)

3. 結合自研 wasm 庫

  1. package.json 加入 "my-wasm-lib": "file:../my-wasm-lib/pkg"
  2. run npm install,即可獲取本地編譯產物
  3. import { add } from "my-wasm-lib";

四、rust-webpack-template——前后端一體化熱編譯

1. 生成項目

mkdir wasm-fullstack && cd $_
npm init rust-webpack
npm run start

默認結構:

src/lib.rs              # Rust 入口
webpack.config.js
index.js              # 前端邏輯,已 import './pkg'

2. 為什么選它

特性說明
熱更新 HMR改 Rust -> wasm-pack watch -> Webpack reload
rust-loaderWebpack loader 直接調用 wasm-pack build
統一依賴npm install 即可管理前后端包

3. 適用場景

  • 前端業務少、算法核心多,想要 改代碼 ? 瀏覽器秒刷新
  • Hackathon / Demo 期望 5 分鐘跑通

五、典型工作流組合

方案 A:代碼分倉,產物 npm 依賴(推薦團隊協作

在這里插入圖片描述

  • wasm-lib 用 wasm-pack-template
  • ui-app 用 create-wasm-app
  • 優點:職責清晰,版本控制友好

方案 B:單倉庫極速原型(個人項目

在這里插入圖片描述

  • 一條 npm run start 啟動全棧
  • 缺點:Rust 與 Node 依賴都塞在 package.json,后期拆分略麻煩

六、常見問題 FAQ

癥狀解決方案
wasm-pack 提示 wasm32-unknown-unknown unavailablerustup target add wasm32-unknown-unknown
Module not found: rust-loaderrust-webpack-template 內置;其他腳手架請用 wasm-pack build 先產物
TypeError: WebAssembly.instantiate 跨域dev server 需啟用 --headers 'Access-Control-Allow-Origin:*',或改用 fetch('/pkg/pkg_bg.wasm')
IE11 報崩wasm2js 轉 asm.js 或選擇降級方案

七、結語與實踐建議

  • 先選模板,再寫業務:早期踩好腳手架能省掉 80% 配置工夫
  • 生產環境請務必在 CI 流水線 wasm-pack build --release + wasm-opt -Oz,體積可縮減 30-50%
  • 關注 rustwasm 工作組 的新模板,如基于 Vite / SWC 的現代版本

動手吧! 五分鐘復制下方命令,你的第一個 Rust → WebAssembly 項目,就此誕生!

# 1) 造輪子
cargo install cargo-generate wasm-pack
cargo generate --git https://github.com/rustwasm/wasm-pack-template.git --name my-wasm-lib
cd my-wasm-lib && wasm-pack build --release# 2) 裝輪子
mkdir my-app && cd $_
npm init wasm-app
npm install ../my-wasm-lib/pkg            # or `npm link`# 3) 運行
npm run start

祝編碼愉快,WASM 王者之路揚帆起航 🚀

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917495.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917495.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917495.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RSA 解密邏輯

以下是使用類的方式封裝 RSA 解密邏輯,使其更易于調用和管理: from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 import base64 class RSADecryptor:"""RSA 解密工具類,封裝解密邏輯,方便…

Oracle 19C 在centos中安裝操作步驟和說明

1、oracle 一到五,是在centos下,搭建數據的每個具體詳細步驟。 oracle:一、環境準備-CSDN博客 oracle:二、centos下安裝oracle-CSDN博客 oracle :三、配置LISTEN-CSDN博客 oracle:四、創建數據庫-CSDN博客 oracle:五、配置修改-CSDN博客…

《前端無障礙設計的深層邏輯與實踐路徑》

一個Web應用的價值不僅在于其功能的豐富性,更在于它能否向所有用戶敞開大門。那些被忽略的交互細節—一段沒有替代文本的圖片、一個無法通過鍵盤觸發的按鈕、一組對比度不足的文字——正在悄然構建起一道無形的壁壘,將部分用戶隔絕在數字世界之外。前端無障礙設計(A11y)的本…

ctfshow-web入門-254-266-反序列化

web254 代碼審計&#xff0c;輸入給的username和password ?usernamexxxxxx&passwordxxxxxx web255 這題要從cookie中獲取值并且需要把isVip設為true&#xff0c;并且將序列化之后的結果進行url編碼 <?php class ctfShowUser{public $usernamexxxxxx;public $passw…

ssh服務器端口和本地端口映射

由于服務器防火墻設置&#xff0c;本地能ssh登錄遠程服務器&#xff0c;但本地不能通過http的方式訪問服務&#xff0c;如tensorborad、gradle或其他服務。在不需要修改防火墻安全設置的情況下&#xff0c;這里我們臨時通過ssh端口映射的方式&#xff0c;在本地瀏覽器訪問這些服…

計算機網絡——UDP

1. UDP的背景 1&#xff09;先有TCP&#xff0c;后覺笨重 在TCP被首次提出后&#xff0c;將“可靠傳輸&#xff0c;流量控制&#xff0c;擁塞控制”全做在一個協議里隨著應用增多 ——> 很多場景&#xff08;語音&#xff0c;視頻&#xff09;并不需要萬無一失 ——> 更…

常見的深度學習模塊/操作中的維度約定(系統性總結)

&#x1f7e9; 1. 數據張量&#xff08;特征圖&#xff09;維度這是我們喂進網絡或從網絡中出來的“實際數據”。類型維度格式舉例說明圖像/特征圖(B, C, H, W)(4, 3, 32, 32)PyTorch中最常用的數據布局&#xff08;NCHW&#xff09;圖像/特征圖&#xff08;TensorFlow風格&…

【筆記】重學單片機(51)(上)

為學習嵌入式做準備&#xff0c;重新拿起51單片機學習。此貼為學習筆記&#xff0c;僅記錄易忘點&#xff0c;實用理論基礎&#xff0c;并不是0基礎。 資料參考&#xff1a;清翔零基礎教你學51單片機 51單片機學習筆記1. C語言中的易忘點1.1 數據類型1.2 位運算符1.3 常用控制語…

Arrays.asList() add方法報錯java.lang.UnsupportedOperationException

1. 問題說明 記錄一下遇到的這個bug&#xff0c;下面是段個簡化后的問題重現代碼。 public class Test {public static void main(String[] args) {List<Integer> list Arrays.asList(1, 2, 3);list.add(4);} }2. 原因分析 我們看一下Arrays.asList(…) 的源碼&#xff…

克羅均線策略思路

一個基于移動平均線的交易策略&#xff0c;主要通過比較不同周期的移動平均線來生成買賣信號。該策略交易邏輯思路和特點&#xff1a;交易邏輯思路1. 多頭交易邏輯&#xff1a;- 當當前周期的收盤價高于其4周期移動平均線&#xff0c;并且4周期移動平均線高于9周期移動平均線&a…

Go語言--語法基礎7--函數定義與調用--自定義函數

函數是基本的代碼塊&#xff0c;用于執行一個任務。Go 語言最少有 1 個 main() 函數。你可以通過函數來劃分不同功能&#xff0c;邏輯上每個函數執行的是指定的任務。函數聲明告訴了編譯器函數的名稱、返回類型和參數。函數三要素名稱 》功能參數 》接口返回值 》結果函數分類內…

Ollama模型庫模型下載慢完美解決(全平臺)

前言在我們從ollama下載模型時,會發現ollama最開始下載速度很快,能達到10-20MB/s但到了后期,速度就會越來越慢,最終降低到10-20kb/s下載一個模型大多需要1到1.5小時這是因為ollama服務器負荷過大的問題思路如果在下載中終斷下載,在用ollama run恢復下載,速度就會又提上去,但3-4…

web:js的模塊導出/導入

一般web頁面中&#xff0c;html文件通過標簽script引用js文件。但是js文件之間的引用要通過import/exprot進行導入/導出&#xff0c;同時還要在html文件中對js文件的引用使用type屬性標注。在下面的例子中&#xff0c;html頁面<!DOCTYPE html> <html lang"en&quo…

關于Web前端安全防御之安全頭配置

一、核心安全頭的作用 1. X-Content-Type-Options: nosniff 該響應頭用于阻止瀏覽器對資源的 MIME 類型進行 “嗅探”&#xff08;猜測&#xff09;&#xff0c;強制瀏覽器嚴格遵守服務器返回的 Content-Type 頭部聲明。 風險背景&#xff1a; 瀏覽器默認會對未明確聲明類型…

C++ : 反向迭代器的模擬實現

一、reverse_iterator.h#pragma once namespace txf { //外界傳什么類型的iteator&#xff0c;它就用什么iterator 初始化 , list用_list_iterator<T,T&,,T*> ,vector<T> 用T*template<class Iterator,class Ref,class Ptr>//在這個反向迭代器中涉及到…

自動化與配置管理工具 ——SaltStack

一、SaltStack 概述1.1 核心特性SaltStack 是一款開源的自動化運維工具&#xff0c;采用客戶端 - 服務器&#xff08;C/S&#xff09;架構&#xff0c;以高效、靈活和可擴展著稱。其核心特性包括&#xff1a;高性能架構&#xff1a;基于 ZeroMQ 消息隊列&#xff0c;支持大規模…

Rust → WebAssembly 的性能剖析全指南

一、用優化&#xff08;Release&#xff09;構建 ? 務必在做性能測量前使用 優化模式 構建你的 WASM。默認情況下&#xff1a; wasm-pack build → Release 優化wasm-pack build --dev 或 cargo build → Debug&#xff0c;性能大打折扣 優化編譯能開啟 LLVM 的各項優化和 LT…

第15屆藍橋杯Pthon青少組_國賽_中/高級組_2024年9月7日真題

更多內容請查看網站&#xff1a;【試卷中心 -----> 藍橋杯----> Python----> 國賽】 網站鏈接 青少年軟件編程歷年真題模擬題實時更新 第15屆藍橋杯Pthon青少組_國賽_中/高級組_2024年9月7日真題 一、單選題 第 1 題 單選題 下列運算符中&#xff0c;表示并集的…

【Django】-9- 單元測試和集成測試(上)

一、Django 項目單元 & 集成測試準備 &#x1f447;依賴安裝&#xff08;給項目裝 “測試小幫手”&#x1f37c;&#xff09;pdm add -d black isort flake8 pytest pytest-django pytest-coverage &#x1f449; 這行命令像在給項目 “采購” 測試工具&#xff1a;black …

VUE-第二季-01

目錄 1.Vue程序初體驗 1.1 下載并安裝vue.js 1.2 第一個Vue程序 1.3 Vue的data配置項 1.4 Vue的template配置項 1.5 Vue實例 和 容器 的關系是&#xff1a;一夫一妻制 2.Vue核心技術 2.0 Vue的模板語法 2.0.1 插值語法 插值語法總結&#xff1a; 2.0.2 指令語法 指…