[翻译]Hello, wasm-pack - cargo.toml

简介: Hello, wasm-pack - cargo.toml 翻译

Cargo.toml

cargo.toml是Rust 包管理器 cargo 的清单文件。这个文件包 nameversion 和包的依赖,在 Rust 中,我们一般称之为 crate

在示例中给出了一系列信息,但是我们主要讨论如下三点:

  • crate-type
  • wasm-bindgen 依赖
  • [features]wee_allocconsole_error_panic_hook 依赖

1.crate-type

[lib]
crate-type = ["cdylib", "rlib"]

Rust-wasm 包与通常的 crate 有一点不同,作为 WebAssembly 项目, 我们需要在 cargo.toml 中加入该说明。

如果你熟悉其他的 Rust crate,那么你肯定知道,大多的 crate 的类型是 rlib(默认), 或者是二进制形式的 bin(这种形式不需要 crate-type 注解), 并且 [lib] 注解在普通的 Cargo 项目中并不需要指定。

crate-type = ["cdylib"] 指示你的工程将会被编译为动态系统库 [dynamic system library], 但是对于 WebAssembly,他将会编译为一个没有启动函数的 .wasm 文件,在 Linux 平台上,他将会创建.so 文件,在macOS 上将会创建.dylib文件,在 windows 平台上将会创建 *.dylib 文件。

我们通常指定 crate-type = ["rlib"] 来确保我们的库可以用 wasm-pack 来做单元测试(稍后会看到)。如果没有这个配置,我们将不能测试我们的库,因为 cdylib 包类型和 wasm-pack 的单元测试类型相冲突。

你可以使用此链接获取更多关于包类型的知识。

2. wasm-bindgen 依赖

wasm-bindgen 在WebAssembly 中是一个重要的依赖。 这个包允许我们使用 [wasm-bindgen] 为在 JavaScript 和 Rust 生成的 wasm 之间的代码打标签。以使我们使用它的属性可以导入 JS 并且导出 Rust。

wasm-bindgen = "0.2"

当我们讨论 lib.rs 生成什么内容的时候,将会看到更多关于怎么使用这个库。
如果你从 JavaScript 技术栈过来,你可能注意到了当我们添加依赖的时候并没有加 ^ 或者 ~ ,看起来像是我们只要 0.2 这个版本。然而,事实并非如此!在 Rust 里, ^ 是默认的,你可使用这个 链接查看更多信息

3. [features] 和 wee_alloc, console_error_panic_hook dependencies

作为我们设计模板的工作的一部分,该模板可帮助人们发现针对特定用例的有用包,该模板包括两个依赖项,这对于开发Rust-wasm包的人们可能非常有用:console_error_panic_hook 和 wee_alloc。

因为这些依赖关系主要在 Rust-wasm 包开发工作流程的特定部分中有用,所以我们还设置了一些粘合代码,使我们既可以将它们都包含为依赖关系,又可以选择将它们包含在内。

[features]
default = ["console_error_panic_hook"]

[dependencies]
wasm-bindgen = "0.2"

# The `console_error_panic_hook` crate provides better debugging of panics by
# logging them with `console.error`. This is great for development, but requires
# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
# code size when deploying.
console_error_panic_hook = { version = "0.1.1", optional = true }

# `wee_alloc` is a tiny allocator for wasm that is only ~1K in code size
# compared to the default allocator's ~10K. It is slower than the default
# allocator, however.
#
# Unfortunately, `wee_alloc` requires nightly Rust when targeting wasm for now.
wee_alloc = { version = "0.4.2", optional = true }

在我们的代码中,只有在启用某些 [features] 的情况下,我们才会将代码的某些部分标记为正在运行,特别是 console_error_panic_hook 和 wee_alloc。默认情况下,仅启用 console_error_panic_hook。要禁用或启用任一功能,默认情况下,我们可以在 [features] 下编辑 default 数组。

要了解有关这些功能的更多信息,我们将在 src/lib.rs 和 src/utils.rs 部分中深入讨论它们。
简要地,它们包括:

  • console_error_panic_hook ,用于将奔溃消息记录到开发人员控制台的功能。
  • wee_alloc,一个使代码量更小而优化的分配器。
目录
相关文章
|
机器学习/深度学习 编解码 算法
超详细!手把手带你轻松掌握 MMDetection 整体构建流程(一)
作为系列文章的第一篇解读,本文主要是从整体框架构建角度来解析,不会涉及到具体算法和代码,希望通过本文讲解: - MMDetection 整体构建流程和思想 - 目标检测算法核心组件划分 - 目标检测核心组件功能
1362 0
超详细!手把手带你轻松掌握 MMDetection 整体构建流程(一)
|
边缘计算 缓存 安全
CDN:互联网世界的“加速器”与“快递网”——从技术起源到未来趋势的全景解读
内容分发网络(CDN)起源于1990年代末,为解决互联网拥堵而生。通过在全球部署边缘节点,缓存静态资源以缩短传输路径,显著提升访问速度并降低服务器压力。其技术历经四个阶段演进:从早期静态缓存到动态加速、移动优化与安全防护,再到如今的智能化融合,CDN已深度嵌入视频直播、企业数字化转型等场景。未来,结合5G、物联网及Web3.0技术,CDN将从“加速器”进化为智能基础设施,持续赋能数字时代。
|
5月前
|
Linux 虚拟化 iOS开发
VMware Workstation Pro 25H2u1 发布 - 免费桌面虚拟化软件
VMware Workstation Pro 25H2u1 for Windows & Linux - 领先的免费桌面虚拟化软件
4432 0
VMware Workstation Pro 25H2u1 发布 - 免费桌面虚拟化软件
|
人工智能 编解码 芯片
告别低效沟通|让技术提问不再头疼-这套高效AI提问模板来帮你
不会向ai提问,不知道怎么提问的 可以看看
21400 1
告别低效沟通|让技术提问不再头疼-这套高效AI提问模板来帮你
|
12月前
|
人工智能 运维 安全
MCP协议深度解析:客户端-服务器架构的技术创新
作为一名长期关注AI技术发展的博主摘星,我深刻感受到了MCP(Model Context Protocol)协议在AI生态系统中的革命性意义。MCP协议作为Anthropic公司推出的开放标准,正在重新定义AI应用与外部系统的交互方式,其基于JSON-RPC 2.0的通信机制为构建可扩展、安全的AI应用提供了坚实的技术基础。在深入研究MCP协议规范的过程中,我发现这一协议不仅解决了传统AI应用在资源访问、工具调用和上下文管理方面的痛点,更通过其独特的三大核心概念——资源(Resources)、工具(Tools)、提示词(Prompts)——构建了一个完整的AI应用生态系统。MCP协议的客户端-
760 0
MCP协议深度解析:客户端-服务器架构的技术创新
|
安全 数据安全/隐私保护 Windows
配置用户通过Telnet登录设备认证示例
本文介绍了通过AAA本地认证配置Telnet登录设备的组网需求、配置思路及操作步骤。企业管理员可借助此方案实现简单、安全的远程设备管理。具体包括:配置LSW1接口IP地址,使能Telnet服务器功能,设置VTY用户界面验证方式为AAA,以及创建本地用户并分配权限。最终验证显示,管理员可通过输入正确用户名和密码成功以Telnet方式登录设备。
配置用户通过Telnet登录设备认证示例
|
11月前
创造与魔法脚本,炉石传说脚本,碧蓝航线脚本开源代码
主脚本包含三个游戏自动化模块:创造与魔法(资源采集/任务)、炉石传说(自动天梯)、碧蓝航线(委托/战斗)
|
11月前
|
Ubuntu 安全 Linux
《Ubuntu 24.04.1版安装全攻略与实测体验》
综上所述,这次关于Ubuntu 24.04.1版的安装经历让我对新版本充满了期待,尽管细节上有些微的变化,但整体体验显得更加便捷易懂。在这一波Ubuntu新气象中,我期待与各位一起分享更多新鲜的体验与感受。
|
网络协议 Ubuntu Devops
【DevOps】Docker 最佳实践指南(绝对干货)
如果需要通过网络远程访问 Docker 守护进程,应开启 TLS 并确保只接受来自可信客户端的连接。
|
安全 Android开发 iOS开发
深入解析:安卓与iOS的系统架构及其对应用开发的影响
本文旨在探讨安卓与iOS两大主流操作系统的架构差异,并分析这些差异如何影响应用开发的策略和实践。通过对比两者的设计哲学、安全机制、开发环境及性能优化等方面,本文揭示了各自的特点和优势,为开发者在选择平台和制定开发计划时提供参考依据。
770 4

热门文章

最新文章