UNPKG

vite-plugin-emt

Version:

emt support for vite

177 lines (151 loc) 5.15 kB
# vite-plugin-emt emt文件支持 处理过程: ``` Emmet with indentations ─► Standard Emmet │ ▼ HTML ◄──── HTML Template ``` ## Requirements Node 16+ ## Build ```sh pnpm build ``` ## Usage ```ts // vite.config.ts import Unocss from 'unocss/vite' import emt, { inlineStylus } from 'vite-plugin-emt' export default { plugins: [ emt(/* emt options */), Unocss({ transformers: [ inlineStylus(/* stylus options */), // other transformers... ] // Unocss options... }) ] } ``` ## Options 所有参数均可选 | 名称 | 类型 | 说明 | | ------------ | --------------------------------------------- | --------------------------------------------------------------------------- | | alwaysReload | boolean | 开发模式下,当emt文件改变后是否总是重新加载 | | classy | boolean | 启用emmet扩展语法(默认值:`true`) | | cssProps | Set\<string> | 将集合内的元素视为CSS属性,渲染为内联样式,传入一个空的集合表示禁用内联样式 | | literal | string | emt字面量前缀,默认为emt,为空串表示禁用emt字面量 | | log | (server: ViteDevServer, file: string) => void | 日志函数,默认重新加载时输出信息到控制台 | | paths | string[] | 除`root`外的include搜索路径 | | read | (path: string) => string | 自定义文件读取函数 | | render | Render | 自定义模板渲染函数 | | root | string | emt文件所在根文件夹 | | templated | boolean | 为true时每个emt元素模板至多展开一次 | | tplFile | string | 自定义模板文件 | | writeHtml | boolean | 是否输出html,用于构建 | ### emt环境变量 环境变量类型均为string | 名称 | 说明 | | ------------ | --------------------- | | REQUEST_PATH | 请求的emt文件完整路径 | ### 标题 位于emt文件开头,格式如下: ```styl title{标题}* ``` 大括号中的内容会自动赋值给`doc_title`变量,最后渲染到page.emt中的对应位置 末尾的`*`表示注释,用来防止在渲染HTML时输出title标签,**不能省略** 无标题(或标题为空)的emt文件会被当作模板处理(无法通过浏览器直接访问) ### 引入CSS 在需要引入的位置加上 ```styl scr[t=module]{import 'example.styl'} ``` vite会自动将生成的css插入到head中 ## emmet语法扩展 input: ```styl .flex.items-center p 6 max-w sm mx auto shadow lg space x 4 ``` output: ```html <div class="flex items-center p-6 max-w-sm mx-auto shadow-lg space-x-4"></div> ``` `cssProps`中的属性当成内联样式处理 input: ```styl #s p 0 width 50% ``` output: ```html <div id="s" class="p-0" style="width:50%"></div> ``` 若标签名末尾带有冒号,则将该部分当CSS而非HTML处理 若属性名末尾带有冒号,则生成 CSS选择器生成规则:从距离最近的带有id的父元素或根元素开始直到本元素,以>连接 input: ```styl #t dl dt:after content: ":" dd margin: 0 ``` output: HTML ```html <div id="t"><dl><dt></dt><dd></dd></dl></div> ``` CSS ```css #t>dl>dt:after{content:":"} #t>dl>dd{margin:0} ``` ## 预处理器 ### Stylus预处理器 inlineStylus:将所有`Shadow DOM`内的style标签的内容视为stylus处理,再将生成的css交给unocss处理 使用: ```ts import { inlineStylus } from 'vite-plugin-emt' export default defineConfig({ // … plugins: [ inlineStylus(), // … ], }) ``` ### TypeScript预处理器 inlineTS:将所有内联`<script>`当成TypeScript处理 使用: ```ts import { inlineTS } from 'vite-plugin-emt' export default defineConfig({ // … plugins: [ inlineTS(), // … ], }) ``` ### 预处理器类型声明 在env.d.ts中加上 ```ts import { Preprocessor } from 'vite-plugin-emt' declare global { declare const emt: Preprocessor, styl: Preprocessor } ``` 若指定了Options.literal,上面代码中的emt和styl需要改为Options.literal指定的名称