[译] Hello, wasm-pack!


title: [译] Hello, wasm-pack!javascript

date: 2018-4-28 7:29:00html

categories: 翻译java

tags: WebAssemblywebpack

source: 原文地址git

auther: Ashley Williamsgithub


[译] Hello, wasm-pack!


正如Lin Clark在她的关于Rust和WebAssembly的文章中强调的那样:WebAssembly的目标不是取代JavaScript,而是成为一个很是棒的JavaScript工具。为了简化跨越JavaScript和WebAssembly之间的语言界限,已经涌现了许多许多使人惊叹的成果,你能够阅读Alex Crichton在wasm-bindgen上发布的全部内容。本文重点介绍不一样类型的 JavaScript/Rust 集成:软件包生态系统(package ecosystem)和开发人员工做流程(developer workflows)。web

Rust和JavaScript都有充满活力的包管理生态系统。Rust有cargocrates.io。JavaScript有 几个 CLI 工具,包括与npm注册表链接的npm CLI。为了使WebAssembly得到成功,咱们须要这两个系统良好地协同工做,特别是:npm

  • Rust开发人员应该可以生成用于JavaScript的WebAssembly包,而不须要Node.js开发环境
  • JavaScript开发人员应该可以使用WebAssembly而不须要Rust开发环境

✨📦 Enter: wasm-pack.编程

wasm-pack 是用于组装和包装以WebAssembly为目标的Rust包装箱的工具。这些软件包能够发布到npm Registry并与其余软件包一块儿使用。这意味着你能够将它们与JS和其余软件包并行使用,而且能够在许多类型的应用程序中使用,例如Node.js服务器端应用程序,Webpack捆绑的客户端应用程序或任何其余类型的应用程序使用npm依赖关系。你能够在crates.ioGitHub上找到 wasm-packjson

这个工具的开发刚刚开始,咱们很高兴可以从涉及Rust和JavaScript的开发人员中得到更多的帮助。JavaScript和Rust生态系统都专一于开发者体验。咱们首先知道,生产高效的生态系统的关键是使自动执行枯燥任务并摆脱开发人员方式的好工具。首先咱们知道,一个高效生产的生态系统的关键是自动执行枯燥任务并使开发人员摆脱无聊方式的好工具。在本文中,我将讨论咱们的进度,咱们的目标,如何开始使用工具,以及如何参与塑造将来。

💁 What it does today

如今,wasm-pack 引导你完成四个基本步骤,准备将你的Rust代码做为WebAssembly包发布到npm注册表中:

1. Compile to WebAssembly

wasm-pack 将使用 rustup 添加相应的WebAssembly编译目标,并以发布模式编译Rust到WebAssembly。

  • 若是须要,添加wasm32-unknown-unknown编译目标
  • 将你的项目编译到发布版本

2. Run wasm-bindgen

wasm-pack 包装了 wasm-bindgen 工具的CLI部分并为你运行它!这能够将WebAssembly模块封装在JS包装中,这样人们能够更轻松地与模块进行交互。wasm-bindgen 同时支持ES6模块和CommonJS,你可使用 wasm-pack 生成任意类型的包!

3. Generate package.json

wasm-pack 会读取你的 Cargo.toml 并生成将你的软件包发布到npm注册表所需的package.json文件。它会:

  • 复制你的项目名称和说明
  • 连接到你的Rust项目的存储库
  • 列出文件密钥中生成的JavaScript文件。这能够确保有且只有这些文件包含在npm包中。若是你打算在浏览器中使用此软件包或包含此软件包的软件包,这对于确保良好的性能尤其重要!

4. Documentation

wasm-pack 会将你的Rust项目的README.md复制到它生成的npm包中。咱们有不少关于如何进一步扩展以支持Rust生态系统的文档功能rustdoc的更多想法 - 更多内容请参见下一节!

�� 将来计划

rustdoc集成

crates.io团队对开发人员进行了调查,并了解到开发人员在使用crate时的状况时最但愿得到的是优秀的文档。贡献者Yoshua Wuyts介绍了经过将rust-pack与Rust API文档工具rustdoc集成来生成更多README.md内容的绝妙想法。Rust-wasm团队致力于使Rust成为编写WebAssembly的一流方式。提供Rust生成的WebAssembly软件包的文档,这些软件包易于编写,易于发现,与咱们的目标完美匹配。详细了解团队在这个iusse上的想法并加入讨论!

管理和优化你的Rust和JS依赖关系图

下一个关于wasm-pack的大型开发工做将着重于在编译的WebAssembly中使用自定义段来声明对本地Javascript文件或其余npm包的依赖关系。

这个功能的初步工做已经落在wasm-bindgen中,因此下一步将把它整合到wasm-pack中。开始的整合不会太棘手 - 但咱们很高兴拥有必须简化和优化Rust依赖关系树的探索机会,这些依赖关系树在几个层次上包含npm依赖关系!这项工做与Webpack这样的捆绑软件提供的优化相似,可是Rust层面的依赖关系。

咱们仍然须要解决不少问题,而且要作许多简单的工程工做。在几个星期内,这个主题会有一个完整的帖子,因此请留意!

在Rust中增长Node.js工具链

这个项目最大且最雄心勃勃的目标是在Rust中重写所需的npm loginnpm packnpm publish步骤,以便对于那些目前不使用Node.js的人来讲,对Node.js开发环境的所需依赖在其工做流程中变得可选。正如咱们以前所说的,咱们但愿确保WebAssembly包开发者和用户均可以继续使用他们熟悉的工做流程。目前,JavaScript开发人员的确如此 - 他们不须要拥有Rust开发环境或Rust的任何知识便可开始使用已使用wasm-pack发布的使用Rust生成的WebAssembly模块。

与npm和打包器协做

咱们一直与npm CLI团队成员Kat MarchanRebecca Turner以及webpackParcel工做人员进行交流 - 咱们很高兴与他们继续合做,以便开发人员轻松发布和使用WebAssembly代码!

🛠 Start using it today!

wasm-pack目前是经过Cargo发布的命令行工具。要安装它,请安装Rust开发环境,而后运行:

cargo install wasm-pack
复制代码

若是您不肯定从哪里开始,咱们为您提供了一个教程!本教程由Michael Gattozzi和Rust-wasm工做小组带领您:

  • 写一个小的Rust库
  • 将其编译为WebAssembly,打包并使用wasm-pack进行发布
  • 捆绑webpack制做一个小型网站

👯‍♀️贡献

全部优秀的开发人员工具的关键是该工具的开发人员与在平常工做流程中使用该工具的开发人员之间的短反馈周期。

为了让wasm-pack更完美,也为咱们全部的WebAssembly开发人员工具,咱们须要全部技能水平和背景的开发人员参与其中!

看看咱们的贡献者指南问题跟踪器(咱们按期将事情标记为“优先的好问题”,并提供指导和指导!) - 咱们很高兴与您合做!

关于 Ashley Williams

Ashley Williams是Integer32的一名工程师,负责Mozilla的Rust编程语言。她是Rust Core团队的成员,领导Rust社区团队,并帮助维护Rust的软件包注册表crates.io。以前,她曾在Javascript的包管理员npm担任工程师,目前是Node.js基金会董事会的我的会员。做为一名有长期教育经历的老师,Ashley将大部分精力都集中在开源项目的教育计划上,2016年建立了NodeTogether,目前正在领导RustBridge计划。她曾表明教师向TC39会议提出见解来影响JavaScript的发展,并热衷于经过她在WebAssembly上的工做来推进web的发展。

相关文章
相关标签/搜索