服务器端:Npm 集成Mini-Van 可以在服务器端用作模板引擎,为 HTTP 服务器渲染动态 Web 内容,借助于 NPM 包 mini-van-plate,可以在 Node.js 或 Bun 中使用 。
目前服务器端集成有两种模式,即 van-plate 模式(基于文本模板,因此不需要 DOM 依赖)和 mini-van 模式(基于 DOM,因此需要 DOM 依赖) 。
import http from "node:http"import van from "mini-van-plate/van-plate"const {a, body, li, p, ul} = van.tagsconst hostname = '127.0.0.1'const port = 8080console.log("Testing DOM rendering...")// 在控制台中生成`<a href=https://www.isolves.com/it/cxkf/kj/2023-05-22/"https://vanjs.org/">VanJS`console.log(a({href: "https://vanjs.org/"}, "VanJS").render())const server = http.createServer((req, res) => {res.statusCode = 200res.setHeader('Content-Type', 'text/html; charset=utf-8')res.end(van.html(body(p("Your user-agent is: ", req.headers["user-agent"] ?? "Unknown"),p("Hello"),ul(li("?World"),li(a({href: "https://vanjs.org/"}, "VanJS")),),),))})server.listen(port, hostname, () =>console.log(`Server running at http://${hostname}:${port}/`))
服务器端:Deno 集成Mini-Van 也可以在 van-plate 模式和 mini-van 模式下与 Deno 一起使用 。Deno 模块已在 deno.land/x/minivan 发布 。下面是van-plate模式代码:
import { serve } from "https://deno.land/std@0.184.0/http/server.ts"import van from "https://deno.land/x/minivan@0.3.3/src/van-plate.js"const {a, body, li, p, ul} = van.tagsconst port = 8080console.log("Testing DOM rendering...")// 在控制台输出 `<a href=https://www.isolves.com/it/cxkf/kj/2023-05-22/"https://vanjs.org/">VanJS` console.log(a({href: "https://vanjs.org/"}, "VanJS").render())console.log(`HTTP webserver running. Access it at: http://localhost:${port}/`)await serve(req => new Response(van.html(body(p("Your user-agent is: ", req.headers.get("user-agent") ?? "Unknown"),p("Hello"),ul(li("?World"),li(a({href: "https://vanjs.org/"}, "VanJS")),),),),{status: 200,headers: {"content-type": "text/html; charset=utf-8"},},), {port})
在Mini-Van 模式下需要第 3 方 DOM 库来提供 Document 对象,下面是一个集成 deno-dom 的代码示例:
import { serve } from "https://deno.land/std@0.184.0/http/server.ts"import { DOMParser } from "https://deno.land/x/deno_dom@v0.1.38/deno-dom-wasm.ts"import van from "https://deno.land/x/minivan@0.3.3/src/mini-van.js"const document = new DOMParser().parseFromString("", "text/html")!const {tags, html} = van.vanWithDoc(document)const {a, body, li, p, ul} = tagsconst port = 8080console.log("Testing DOM rendering...")const anchorDom = a({href: "https://vanjs.org/"}, "VanJS")// anchorDom is an HTMLAnchorElement// 在控制台输出 `<a href=https://www.isolves.com/it/cxkf/kj/2023-05-22/"https://vanjs.org/">VanJS` console.log(anchorDom.outerHTML)console.log(`HTTP webserver running. Access it at: http://localhost:${port}/`)await serve(req => new Response(html(body(p("Your user-agent is: ", req.headers.get("user-agent") ?? "Unknown"),p("Hello"),ul(li("?World"),li(a({href: "https://vanjs.org/"}, "VanJS")),),),),{status: 200,headers: {"content-type": "text/html; charset=utf-8"},},), {port})
客户端集成要在客户端使用,需要下载最新版本的 mini-van-0.3.3.min.js 并将以下行添加到脚本中:
import van from "./mini-van-0.3.3.min.js"
如果要在不支持 ES6 模块的情况下进行编码,可以下载打包好的版本
mini-van-0.3.3.nomodule.min.js 并将以下行添加到 HTML 文件中:
<script type="text/javascript" src=https://www.isolves.com/it/cxkf/kj/2023-05-22/"mini-van-0.3.3.nomodule.min.js">
4.本文总结本文主要和大家介绍号称世界上最小的响应式 UI 框架,即 VanJS 。相信通过本文的阅读,大家对 VanJS 会有一个初步的了解 。
因为篇幅有限,文章并没有过多展开,如果有兴趣,可以在我的主页继续阅读,同时文末的参考资料提供了大量优秀文档以供学习 。最后,欢迎大家点赞、评论、转发、收藏!
参考资料https://Github.com/vanjs-org/van
https://vanjs.org/demo
https://vanjs.org/minivan
https://vanjs.org/start
推荐阅读
- 如何使用Go实现原型设计模式
- 工厂模式:将对象的创建与使用分离,提高程序可维护性和可扩展性
- 李小璐|李小璐拍广告疑似正式复出,小腹凸起身材发福,曾发文喊冤
- 拉线式油门的车那么好开,为什么会被淘汰呢?
- 跑高速时,很多老司机全程S挡,而不用D挡,两种模式的差距很明显
- |李小璐出轨风波后正式复工,发文解释与贾乃亮复婚传闻
- 曹佑宁|王净、曹佑宁“520放闪”PO情侣照了!花式秀恩爱藏甜蜜3细节
- 标王|中式温柔风,翡翠蛋面吊坠
- 周冬雨|刘昊然周冬雨正式亮相戛纳红毯,导演陈哲艺见证二人爱情
- 发型|吴越51岁头发稀疏断崖式衰老,生图不修且自信,越看越舒服!