暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

maomi:rust 语言的 web 组件化开发框架

最后的叶子的奇妙小屋 2021-07-27
13515

长久以来,我们习惯用 JavaScript 进行 web 页面开发,后来又开始使用 node.js 进行 web 服务器端开发。这种全栈开发方式很实用,但也受到性能及可维护性的困扰。

随着 WebAssembly 日渐成熟,除了 JavaScript 之外,还可以选择 rust 语言来进行全栈开发了!

—— maomi ——

maomi 是我最近开始着手设计实现 rust 语言的组件化开发框架。maomi 类似于 web 开发者所熟知的 react 、 vue 框架,但它使用 rust 语言编写,与 rust 语言风格紧密融合,同时大量借助 rust 强大的编译期静态检查能力和 rust 系统级编程语言的优异性能。

  • rust 般强大的编译期检查能力,尽早发现代码中的 bug ;

  • 编译到 WebAssembly ,性能优秀;
  • 类 MVVM 的定义式、组件化开发;
  • 支持服务器端渲染。

—— Hello World ——

先来个 hello world 示例代码吧!在 maomi 框架中,每个页面(或组件)都由三部分组成:模板、 struct 数据定义和对 Component trait 的实现。

首先,写一段 HelloWorld 模板。这段模板是类 XML 语法的,通过名为 template! 的 macro 直接嵌入 rust 代码里面。

    template!(xml for HelloWorld {
    <div style="display: inline">
            { &self.a } // 可以用 rust 表达式来引入动态数据
    <slot >
    </div>
    });
    复制

    然后,给 HelloWorld 定义一些数据,这些数据项可以用在上面的模板里面。

      struct HelloWorld {
      a: String,
      }
      复制

      最后,给 HelloWorld 实现 Component trait ,可以实现一些生命周期方法。其中 new 方法是必不可少的,在实例被创建时会调用。

        impl<B: Backend> Component<B> for HelloWorld {
        fn new(_ctx: ComponentContext<B, Self>) -> Self {
        Self {
        a: "Hello world!".into()
        }
        }
        }
        复制

        这样,我们就做出了一个 HelloWorld 页面(组件也是类似的做法)。要把它显示在网页里的话,就要把它“挂载”到 HTML 里面。具体做法可以参考完整示例代码:

        https://github.com/LastLeaf/maomi/tree/master/examples/hello-world
        —— 编译运行 ——

        为了让这段示例代码能够运行起来,需要以下工具:

        • rust 编译工具链;
        • wasm-pack :https://rustwasm.github.io/wasm-pack/
        • webpack 。

        首先执行 wasm-pack 来将 rust 代码编译成 WebAssembly ,然后执行 webpack 来打包。

          $ wasm-pack build
          $ webpack
          复制

          运行起来之后,页面内就会显示出“Hello world!”。

          —— 开发状态 ——

          maomi 还在早期开发之中,不过已经比较完整了,具备一定的可用性。近期我会用它制作一个博客引擎,在实际用例中完善特性。

          GitHub:

          https://github.com/LastLeaf/maomi

          里面的 example 中有几个用例可供参考。

          如果对 maomi 感兴趣,欢迎 watch - start - fork 三连!也欢迎与我联系,和我一起讨论你的想法、参与开发!

          —— 什么?你问我它和某可爱生物有什么联系?

          文章转载自最后的叶子的奇妙小屋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论