一、模板概览

模板生成方式核心用途典型角色
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 指令语法 指…