了解uno.config.ts文件的配置项---content

提取

UnoCSS 的工作原理是从代码库中搜索使用的样式类并按需生成相应的 CSS。我们称这个过程为提取

content 配置项

content 是 UnoCSS 配置中的一个重要部分,用于定义哪些文件的内容需要被解析。它通常用于支持按需生成 CSS 规则,确保只生成实际用到的样式,从而优化最终的 CSS 文件大小。

pipeline ****配置

pipelinecontent 的子配置项,用于定义内容解析的管道(pipeline)。它包含两个主要部分:

  • include:指定哪些文件路径或模式需要被解析。
  • exclude:指定哪些文件路径或模式需要被排除(在这段代码中未使用)。
javascript 复制代码
// uno.config.ts
export default defineConfig({
  content: {
    pipeline: {
      include: [
        // the default
        /.(vue|svelte|[jt]sx|mdx?|astro|elm|php|phtml|html)($|?)/,
        // include js/ts files
        'src/**/*.{js,ts}',
      ],
      // exclude files
      // exclude: []
    },
  },
})
css 复制代码
 /.(vue|svelte|[jt]sx|mdx?|astro|elm|php|phtml|html)($|?)/

这是一个正则表达式,用于匹配以下文件类型:

  • .vue(Vue 组件文件)
  • .svelte(Svelte 组件文件)
  • .jsx.tsx(React 组件文件,支持 TypeScript)
  • .mdx.md(Markdown 文件,支持 MDX 格式)
  • .astro(Astro 组件文件)
  • .elm(Elm 语言文件)
  • .php(PHP 文件)
  • .phtml(PHP 模板文件)
  • .html(HTML 文件)

这个正则表达式匹配这些文件扩展名的文件,并且允许文件路径以 ? 结尾(例如,用于某些特殊查询参数的场景)。

css 复制代码
'src/**/*.{js,ts}'

通过这种配置,UnoCSS 可以扫描这些文件的内容,提取其中使用的 UnoCSS 类名,并生成对应的 CSS 规则。这有助于实现按需加载样式,减少生成的 CSS 文件大小,同时确保只包含实际用到的样式。

可以在希望 UnoCSS 扫描的文件中的任何位置添加 @unocss-include 魔术注释(基于每个文件)。如果需要扫描 *.js or *.ts 文件,也是这样配置。

使用 @unocss-include 魔术注释

1. 在文件中添加注释

在需要 UnoCSS 扫描的文件顶部添加以下注释:

arduino 复制代码
// @unocss-include

这个注释会告诉 UnoCSS,即使该文件没有被默认的解析规则匹配到,也需要扫描该文件以提取 UnoCSS 类名。

同样,您还可以添加 @unocss-ignore 来绕过整个文件的扫描和转换。

如果您希望 UnoCSS 跳过一段代码,不从中提取任何内容,您可以成对使用 @unocss-skip-start @unocss-skip-end 。注意,必须成对使用才有效。

xml 复制代码
<p class="text-green text-xl">
  Green Large
</p>

<!-- @unocss-skip-start -->
<!-- `text-red` will not be extracted -->
<p class="text-red">
  Red
</p>
<!-- @unocss-skip-end -->

从文件系统中提取

如果您使用的集成无法访问构建工具管道(例如,PostCSS 插件),或者您正在与后端框架集成,这样代码就不会通过 pipeline ,您可以手动指定要提取的文件。

less 复制代码
// uno.config.ts
export default defineConfig({
  content: {
    filesystem: [
      'src/**/*.php',
      'public/*.html',
    ],
  },
})

从行内文本中提取

inlinecontent 的子配置项,用于定义直接提供的内联内容。它支持以下两种类型的内容:

  • 直接提供的 HTML 字符串:可以直接写在配置文件中。
  • 异步函数:可以通过异步函数动态获取内容,例如从网络请求中获取 HTML 内容。
arduino 复制代码
export default defineConfig({
  content: {
    inline: [
      // plain text
      '<div class="p-4 text-red">Some text</div>',
      // async getter
      async () => {
        const response = await fetch('https://example.com');
        return response.text();
      },
    ],
  },
});
css 复制代码
'<div class="p-4 text-red">Some text</div>',
  • 这是一个直接提供的 HTML 字符串。
  • UnoCSS 会解析这段 HTML,提取其中的类名(如 p-4text-red),并生成对应的 CSS 规则。

异步函数

vbnet 复制代码
async () => {
  const response = await fetch('https://example.com');
  return response.text();
},
  • 这是一个异步函数,用于动态获取内容。
  • 在这个例子中,函数通过 fetch 请求从 https://example.com 获取内容。
  • fetch 请求返回一个 Response 对象,调用 response.text() 方法可以获取 HTML 内容。
  • UnoCSS 会解析返回的 HTML 内容,提取其中的类名,并生成对应的 CSS 规则。
相关推荐
繁依Fanyi10 分钟前
用 CodeBuddy 实现「IdeaSpark 每日灵感卡」:一场 UI 与灵感的极简之旅
开发语言·前端·游戏·ui·编辑器·codebuddy首席试玩官
来自星星的坤2 小时前
【Vue 3 + Vue Router 4】如何正确重置路由实例(resetRouter)——避免“VueRouter is not defined”错误
前端·javascript·vue.js
香蕉可乐荷包蛋6 小时前
浅入ES5、ES6(ES2015)、ES2023(ES14)版本对比,及使用建议---ES6就够用(个人觉得)
前端·javascript·es6
未来之窗软件服务7 小时前
资源管理器必要性———仙盟创梦IDE
前端·javascript·ide·仙盟创梦ide
liuyang___8 小时前
第一次经历项目上线
前端·typescript
西哥写代码8 小时前
基于cornerstone3D的dicom影像浏览器 第十八章 自定义序列自动播放条
前端·javascript·vue
清风细雨_林木木8 小时前
Vue 中生成源码映射文件,配置 map
前端·javascript·vue.js
FungLeo9 小时前
node 后端和浏览器前端,有关 RSA 非对称加密的完整实践, 前后端匹配的代码演示
前端·非对称加密·rsa 加密·node 后端
不灭锦鲤9 小时前
xss-labs靶场第11-14关基础详解
前端·xss
不是吧这都有重名9 小时前
利用systemd启动部署在服务器上的web应用
运维·服务器·前端