查看原文
其他

宣布 Motoko 开发服务器:Web3 dapp 的实时重新加载

Dfifans Internet Computer 2023-07-20


隆重推出 mo-dev,这是一款灵活的实时重新加载服务器,用于在互联网计算机区块链上快速构建和测试 Motoko 服务。
背景
实时重新加载(或更具体地说,热模块替换)是一项成熟的技术,可以极大地提高 Web 开发人员的工作效率,我强烈建议您查看这篇博客文章,以获得对其工作原理的详细解释:
  • blog.logrocket.com/complete-guide-full-stack-live-reload


这是传统 Web 开发领域已解决的问题,Vite、Next.js 和 Webpack 开发服务器等强大的解决方案使得更改一行前端代码并立即在浏览器中看到结果成为可能,通常甚至无需刷新页面。
然而,当开发在区块链上运行的去中心化应用程序(或“dapp”)时,此功能几乎不存在,存在多种选择,例如用于 Solidity 智能合约的 ZepKit,但鉴于 Web2 的极高期望,Web3 实时重新加载的当前状态还有很多不足之处。
这就是 Motoko 编程语言的用武之地,凭借快速的编译时间、基于模块的导入和稳定的变量语义,Motoko 是改变游戏规则的实时重新加载工作流程的理想选择。


在过去的六个月中,DFINITY 基金会在我们内部的 Motoko 项目中采用了全栈实时重载,节省了大量的开发时间,使我们能够快速尝试许多不同的想法,以改善我们互联网计算机的终端用户使用 dapps 的体验。
这是通过 Motoko Dev Server(或简称 mo-dev)实现的,Motoko Dev Server 是一种命令行工具,可促进 Motoko dapp 和智能合约的实时重新加载工作流程。
特征
mo-dev 已经在广泛的项目中使用,例如 Motoko Playground、开发人员体验反馈板,甚至该语言自己的基础库。
每个用例都需要不同的实时重新加载功能,因此我们决定创建一把瑞士军刀(如果您愿意的话),您可以根据您的项目进行选择:
  • 将容器部署到本地副本
  • 生成语言绑定
  • 运行单元测试(以 .test.mo 结尾的文件)
  • 执行命令
  • 上述任意组合

有关功能的完整列表,请查看该项目的 GitHub 存储库:


现在您知道为什么要使用 mo-dev,可以通过以下几种方法开始使用:
在线演示
如果您想尝试 mo-dev 不下载任何东西,这里有一个在线示例项目,您可以完全在浏览器中运行:


安装
在终端中运行以下命令(需要 Node.js ≥ 16):


或者,您可以从项目的 GitHub 版本下载独立的二进制文件。
安装该工具后,运行 mo-dev --help 以查看每个可用功能的使用示例和说明。
Candid UI
假设您正在使用 Candid UI 开发 Motoko 智能合约,以下命令将在文件更改时重新部署容器:


-y 标志会自动响应 dfx 关于升级容器接口(可能会清除容器数据)的提示,您可以根据您的用例随意添加或省略此项。
全栈 Dapp
mo-dev 专门设计用于与 Vite 和 Create React App 等流行的前端构建工具良好配合。
如果您想开始一个新项目,请考虑使用 Vite + React + Motoko 模板(或更简单的纯 JavaScript 版本)。
否则,这是实时重新加载后端 Motoko 容器的一个很好的起点:


每当您更改 Motoko 源代码时,该 --generate 标志都会自动创建和更新 JavaScript 语言绑定。
也可以单独使用此功能(mo-dev --generate)。
高级用法
对于那些想要将 Motoko Dev Server 插入现有 Web 应用程序的人,这里是我们在 DFINITY 采用的可扩展 Vite 项目配置:
  • 在项目根目录下运行 npm install -D npm-run-all mo-dev

  • 添加 frontend npm 脚本运行 vite

  • 添加一个 backend npm 脚本使用相关标志运行 mo-dev

  • start npm 脚本更改为 run-p frontend backend


通过此项目配置,npm start 将运行具有无缝集成控制台输出的 Vite 和 Motoko 开发服务器,您可以通过 npm run frontendnpm run backend 在单独的终端中分割输出。
此配置的另一个好处是任何人都可以运行开发服务器,而无需全局安装该 mo-dev 命令,这对于鼓励开源贡献或作为团队的一部分工作非常有用。
默认情况下,此项目配置将包含在 dfx new 命令即将进行的更改中。
单元测试
mo-dev 附带与第三方库(例如 motoko-matchers)兼容的测试运行器。
要注册单元测试,请在项目中的任意位置创建一个具有 *.test.mo 扩展名的文件,例如,这是一个基本的单元测试,它断言这 2vxsx-fae 是匿名主体:


创建 *.test.mo 文件后,运行以下命令:


每当您更改 Motoko 源文件时,这都会运行所有单元测试。
请注意,使用 --test--deploy 时,开发服务器将等到所有相关测试成功后再重新部署您的容器。
如果您想在没有实时重新加载功能的情况下运行测试,您可以使用 mo-test 自动安装的命令 mo-dev


您还可以包含 -f 用于过滤特定测试文件的标志:


默认情况下,测试运行程序使用 Motoko 解释器,如果性能至关重要,您可以通过安装 Wasmtime 并添加 --testmode wasi 到测试命令来切换到已编译的 WASI 运行时。
Motoko VS Code 扩展还包括测试运行器的 UI:


持续集成
Motoko Dev Server 可在 CI 环境中使用,例如 GitHub Actions、Travis 和 CircleCI,在这些环境中,mo-dev 将自动终止而不是等待文件更改。
您可以通过将 CI 环境变量设置为 true1 在本地系统上实现相同的效果:


最后的想法
以下是一些在使用 mo-dev 时可能会派上用场的其他提示:
  • 切换 Git 分支时可以进行实时重新加载,这对于代码审查和结对编程很有用。

  • 如果您使用过 dfx generate,您可能会遇到一个常见的 catch-22,其中 dfx generatedfx deploy 都需要先运行对方,mo-dev --generate --deploy 自动为您处理这种情况。

  • 您可以使用 mo-dev --exec <command> 定义自定义实时重新加载逻辑。

欢迎反馈,如果您发现错误或想查看新功能,请随时在 GitHub 上联系(或给我们 ⭐️ 以支持该项目):


否则,请考虑在我们的开发者体验反馈板上提交请求,该反馈板本身是用 mo-dev 开发的,如果您好奇的话,这是源代码:


谢谢阅读,干杯!


作者:Ryan Vandersmith翻译:Catherine

-              -


Motoko 和 AgorApp 嵌入式 IDE 一览

基于区块链的搜索引擎能打败谷歌吗?

DFINITY 基金会和 Patika.dev 在土耳其启动第一个以女性为中心的 Web3 计划





你关心的 IC 内容
技术进展 | 项目信息 | 全球活动


长按关注 IC 微信公众号

掌握最新资讯


*添加小助手微信 comiocn 进交流社群


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存