• [2023.09.11]: Yew的SSR中的Cargo.toml配置


    由于各种原因,我最后还是打算把Yew应用的开发从csr模式转成ssr模式。没想到这里面的水还是挺深的,这里面的Cargo.toml配置包含的信息量之大,着实让我头疼了一番。

    Cargo.toml的配置如下

    [package]
    name = "app"
    version = "0.1.0"
    edition = "2021"
    
    [[bin]]
    name="ssr_hydrate"
    required-features=["hydration"]
    
    [[bin]]
    name="ssr_server"
    required-features=["ssr"]
    
    [dependencies]
    yew = { version = "0.20" }
    ...
    [features]
    hydration = ["yew/hydration"]
    ssr = ["yew/ssr"]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    上面的文档包含的信息量比较大,我这里只挑4个地方来说一下(其它点,我自己也是在学习中)。

    1. [package].name

    这个字段用来指定 package 的名称。之前我对这个名称的定义并没有太在意,但在Yew的SSR开发模式中,这个名称会被 bin 模块所引用。如果 package 的名称与 bin 模块中引用的名称不一致,cargo clippy 并不会给出警告,只有在运行 trunk build index.html 时才会报错。

    error[E0432]: unresolved import `app`
     --> src/bin/ssr_hydrate.rs:1:5
      |
    1 | use app::App; 
      |     ^^^ use of undeclared crate or module `app`
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2. [[bin]]

    "[[bin]]“这种用法让我感到意外。使用过ini配置文件的同学都知道”[]“用于表示section,这里的”[[]]"是啥意思?
    经过查阅文档,我才发现这是 toml 对数组的一种定义方式,即允许我们配置多个 bin。这意味着我们可以在同一个 Cargo.toml 文件中定义多个二进制可执行文件,并为它们分别指定不同的配置。这一特性在开发多个相关的工具或应用程序时非常有用。我们只需在 [[bin]] 下添加多个条目,每个条目中配置一个 bin 的名称、入口文件以及其他相关的设置。这样,我们就能更加灵活地管理和构建我们的项目。
    回到Yew的SSR开发中,上面的文档定义了2个bin,ssr_hydrate和ssr_server。
    运行时,需要指定bin,代码如下:

    cargo run --features=ssr --bin ssr_server -- --dir dist
    
    • 1

    3. [[bin]].name

    bin的名称,在这个项目中,它们是ssr_hydrate和ssr_server,即bin的名称直接对应于文件的名称。它们存放在src/bin目录下。在这个项目中,它的目录结构式这样的。

    .
    ├── Cargo.lock
    ├── Cargo.toml
    ├── index.html
    ├── index.scss
    └── src
        ├── bin
        │   ├── ssr_hydrate.rs
        │   └── ssr_server.rs
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4. [[bin]].required-features

    bin的required-features,它是一个数组,数组中的数据来源于[features]。我个人比较害怕这种用法,因为它不能让你一眼看出它们之间的关系。
    在上面的Cargo.toml中,[features]包含了hydration和ssr,这两个值正是被required-features所引用。
    关于required-features,我这里只是带出了一点皮毛,里面的信息量比较大,我后面结合我的开发经历再来逐步展开。

    更多的Cargo.toml配置,请参考官方文档

  • 相关阅读:
    十三、SpringBoot错误处理底层组件和异常处理流程分析
    目前最先进的神经网络算法,神经网络算法发展
    帅尔康衬衫直销网站设计与开发
    Linux - lsof显示 tcp,udp 的端口和进程
    Kotlin基础入门 - 创建、兼容一个属于自己的Kotlin项目
    SpringBoot RabbitMQ 注解版 基本概念与基本案例
    PDF合并和拆分软件 PDF Merge PDF Splitter mac中文版v6.3.9
    H3C 交换机配置SSH
    微信小程序实现上拉加载更多
    国产化操作系统改造oracle proc依赖库文件缺失处理
  • 原文地址:https://blog.csdn.net/firefox1/article/details/132817115