leptos手工集成tailwindcss

最近在看leptos,之前使用过bulma作为css库,感觉样式太少,想结合tailwindcss.

leptos的官方仓库里有例子: tailwind_csr_trunk

但他作为最后结果,本文就介绍下各个部分和是怎么集合的.

主体其实就两个:

cargo + leptos + trunk

这一套作用是编译为wasm.
最小的初始化是新建rust工程,然后增加leptos依赖,写一个hello world之后用trunk运行.
命令如下:

cargo new leptos-test
cd leptos-test
cargo add leptos

在项目根目录放入一个最简单的html:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
    </head>
    <body>
        
    </body>
</html>

main.rs中写入一个hello world:

use leptos::{component, mount_to_body, prelude::*, view, IntoView, Scope};

fn main() {
    mount_to_body(|cx| {
        view! { cx, <App/> }
    })
}

#[component]
fn App(cx: Scope) -> impl IntoView {
    let (count, set_count) = create_signal(cx, 0);
    let double_count = move || count() * 2;

    view! { cx,
        <p>"hello world"</p>
    }
}

使用trunk serve运行即可(指定端口--port port)

至此这部分完成,这部分和tailwindcss独立.

npm + tailwindcss

这一套是生成css.
安装就是用tailwindcss官网的安装方式:

npm install -D tailwindcss
npx tailwindcss init

在tailwind.config.js配置中加上对*.rs文件的扫描(让它扫描到view!宏的内容)

module.exports = {
  content: ["./src/**/*.rs"],
  theme: {
    extend: {},
  },
  plugins: [],
}

input.css和官网一样, 放在项目根目录:

@tailwind base;
@tailwind components;
@tailwind utilities;

最后将css输出到一个位置即可(不要用dist 会和trunk的冲突):

npx tailwindcss -i ./input.css -o ./output.css --watch

可以将上面main.rs的p中增加一些class,例如text-3xl等.

至此,它会根据view!内的使用的class动态生成output.css
这个是因为leptos使用了JSX的语法,所以也能被tailwindcss正确处理.

至此在根目录生成了output.css

引入output.css

在index.html直接link会失败,因为这个index.html被trunk处理,无法直接link.
要参考trunk文档使用特殊的标签:

<link data-trunk href="output.css" rel="css" />
<link data-trunk rel="copy-dir" href="public" />

第一个是引入tailwindcss生成的css,第二个是其他的一些静态文件可以放在根目录的public文件夹中,会被复制进去.

至此就结束了,这个流程中trunk负责wasm和整体的构建,tailwindcss就是css的生成,是两个不同的workflow.