ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

WXT 集成 UnoCSS:在浏览器扩展中配置原子化 CSS 的完整指南

WXT 集成 UnoCSS:在浏览器扩展中配置原子化 CSS 的完整指南 前端开发工具构建工具插件系统【免费下载链接】wxt⚡ Next-gen Web Extension Framework项目地址https://gitcode.com/gh_mirrors/wx/wxt点击查看免费下载本篇技术指南围绕 WXT 官方模块wxt-dev/unocss仓库位于 packages/unocss展开讲解如何在 WXT 浏览器扩展项目中接入 UnoCSS 原子化 CSS 方案从包安装、模块注册、入口样式导入到开发模式警告的处理再到enabled、excludeEntrypoints、configOrPath等全部配置项的语义与源码级实现原理。读完本文你将掌握在 WXT 项目中一键启用 UnoCSS、按入口点精细化控制样式注入范围以及通过内联配置或独立unocss.config.ts文件定制 UnoCSS 行为的完整实战方法。为什么需要wxt-dev/unocss模块WXT 是一个面向现代 Web Extension 的构建框架它通过模块Modules系统在构建流程的不同阶段注入自定义逻辑参见 WXT Modules 文档。UnoCSS 本身是作为 Vite 插件unocss/vite工作的而 WXT 内部使用 Vite 构建多个入口点background、content script、popup 等。如果手动在wxt.config.ts的vite配置里逐个添加 UnoCSS 插件需要处理每个构建步骤和开发服务器的插件注入繁琐且容易遗漏。wxt-dev/unocss模块正是为了解决这一痛点而存在它封装了 UnoCSS 与 WXT 构建流程的全部接线工作只需一行模块声明即可让所有入口点自动获得 UnoCSS 的原子类能力。快速开始安装依赖wxt-dev/unocss要求同时安装unocss本体支持主流包管理器npm i --save-dev wxt-dev/unocss unocss pnpm i -D wxt-dev/unocss unocss yarn add --dev wxt-dev/unocss unocss bun add -D wxt-dev/unocss unocss从 package.json 可知该模块的 peer 依赖为unocss 0.60.0与wxt 0.19.0安装时需确保这两个版本满足要求模块自身的运行依赖仅defu用于合并默认配置与tinyglobby非常轻量。在 wxt.config.ts 中注册模块// wxt.config.ts export default defineConfig({ modules: [wxt-dev/unocss], });注册后模块会通过configKey: unocss见 packages/unocss/src/index.ts向 WXT 的InlineConfig类型注入unocss配置项TypeScript 会为后续的unocss: {...}配置提供完整的类型提示。在入口点导入 UnoCSS 样式在任意需要原子类的入口点文件中如 popup、content script导入 UnoCSS 的虚拟模块即可// entrypoints/popup/main.ts import virtual:uno.css;UnoCSS 会扫描项目源码将用到的原子类编译为真实 CSS 并注入该入口点的产物中。[!IMPORTANT] 开发模式wxt dev下你可能会看到关于uno.css找不到的警告。这是因为开发阶段无法预知哪些文件需要注入 UnoCSS 样式。该警告可以安全忽略——构建产物中样式会正确生效。配置详解模块通过wxt.config.ts中的unocss键配置完整类型定义UnoCSSOptions位于 packages/unocss/src/index.ts全部选项如下enabled类型boolean默认值true是否启用该模块。关闭时模块不会向任何构建流程注入 UnoCSS 插件源码中会输出一条[unocss] wxt-dev/unocss disabled的警告日志见 packages/unocss/src/index.ts。excludeEntrypoints类型string[]默认值[]不需要应用 UnoCSS 的入口点名称列表。WXT 每个构建步骤对应一组入口点例如 background 单独构建该配置用于从特定入口点的构建中排除 UnoCSS 插件。export default defineConfig({ modules: [wxt-dev/unocss], unocss: { // 对 background 入口点不运行 UnoCSS excludeEntrypoints: [background], }, });也可以传入多个入口点例如[popup, options]。入口点名称与entrypoints/目录下的文件名对应不含扩展名。configOrPath类型UnoCSS.VitePluginOptions即unocss/vite插件参数或string默认值undefinedUnoCSS 的配置来源。可以是内联配置对象直接传入 UnoCSS 的 Vite 插件配置配置文件路径相对于rootDir的unocss.config.ts路径模块会将其交给 UnoCSS 插件加载。export default defineConfig({ modules: [wxt-dev/unocss], unocss: { configOrPath: unocss.config.ts, // 或内联对象 }, });当configOrPath为undefined时UnoCSS 会自动在项目根目录查找unocss.config.ts。源码级实现原理wxt-dev/unocss的核心实现非常精简整个模块只有约 39 行逻辑通过 WXT 的两个 Vite 钩子完成插件注入见 packages/unocss/src/index.tswxt.hooks.hook(vite:devServer:extendConfig, (config) { config.plugins?.push(UnoCSS(resolvedOptions.configOrPath)); }); wxt.hooks.hook(vite:build:extendConfig, async (entries, config) { if (entries.every((entry) excludedEntrypoints.has(entry.name))) return; config.plugins?.push(UnoCSS(resolvedOptions.configOrPath)); });开发模式在vite:devServer:extendConfig钩子中向开发服务器配置追加UnoCSS插件生产构建在vite:build:extendConfig钩子中先检查当前构建分组的所有入口点是否全部命中excludeEntrypoints若全部命中则跳过注入否则追加插件。这两个钩子的定义与调用位置可分别在 packages/wxt/src/types.ts 与 packages/wxt/src/core/builders/vite/index.ts 中查到。选项合并通过defu完成默认值定义在模块内部const resolvedOptions defuRequiredUnoCSSOptions, UnoCSSOptions[]( options, { enabled: true, excludeEntrypoints: [background], configOrPath: undefined, }, );注意源码默认值中excludeEntrypoints已包含background与类型注释中标注的default []存在差异以实际运行行为为准未显式配置时 background 入口点默认不注入 UnoCSS。当wxt.config.debug开启时模块还会输出被排除入口点的调试日志见 packages/unocss/src/index.ts。完整实战示例仓库自带的示例工程 packages/wxt-demo/wxt.config.ts 给出了生产级配置范式在modules中声明本地模块文件 modules/unocss.ts内容为export { default } from wxt-dev/unocss;同时配置unocss选项import { defineConfig } from wxt; import { presetWind3 } from unocss; export default defineConfig({ // ... unocss: { excludeEntrypoints: [ example, iframe-src, injected, example-tsx, example-2, iframe, location-change, main-world, sandbox, sidepanel, unlisted, ], configOrPath: { content: { pipeline: { include: [ // 默认扫描范围 /\.(vue|svelte|[jt]sx|mdx?|astro|elm|php|phtml|html)($|\?)/, // 额外让 UnoCSS 扫描 JS/TS 文件中的原子类 src/entrypoints/**/*.{js,ts}, ], }, }, presets: [presetWind3()], }, }, });该示例展示了两个关键实践精细化排除将不适用原子类样式的入口点如injected、iframe、sandbox等特殊脚本显式排除避免无效扫描内联配置直接以对象形式传入configOrPath通过presets引入presetWind3预设并通过content.pipeline.include扩展扫描范围——默认正则不包含.ts/.js源码文件若想在 TS 文件里书写原子类必须像示例一样追加src/entrypoints/**/*.{js,ts}之类的规则。示例入口点中的实际用法可参考 ui.content/index.tsimport uno.css;与 popup.htmllink relstylesheet hrefuno.css /注意 HTML 入口点在演示工程中使用的是uno.css而非virtual:uno.css两者最终都会解析为 UnoCSS 生成的样式文件。常见问题与注意事项开发模式警告如 README 所述wxt dev期间可能提示uno.css未找到这是模块有意为之的行为——开发阶段无法确定注入目标样式会在正式构建时正确生成无需处理。版本兼容务必保证unocss 0.60.0与wxt 0.19.0低于此版本可能导致模块类型或插件接口不匹配。排除粒度excludeEntrypoints的名称必须与入口点文件名一致误写会导致排除失效插件仍被注入而不会报错。TypeScript 类型模块通过declare module wxt增强InlineConfig见 packages/unocss/src/index.tsIDE 中可看到unocss选项的完整 JSDoc 注释配置错误会立即得到类型提示。进一步探索官方文档页面docs/unocss.md通过 include 指令直接嵌入本文所基于的 README模块实现源码packages/unocss/src/index.ts包元数据与 peer 依赖packages/unocss/package.json完整示例配置packages/wxt-demo/wxt.config.tsWXT 模块系统总览docs/guide/essentials/wxt-modules.md模块 API 定义defineWxtModule位于 packages/wxt/src/modules.ts输出文章赞分享前端开发工具构建工具插件系统【免费下载链接】wxt⚡ Next-gen Web Extension Framework项目地址https://gitcode.com/gh_mirrors/wx/wxt点击查看免费下载相关推荐OmniRoute 测试覆盖率治理方案从 56.95% 基线到 90% 目标的七阶段路线图OmniRoute 测试覆盖率治理方案从 56.95% 基线到 90% 目标的七阶段路线图 本文以 OmniRoute 仓库中的测试覆盖率计划文档 docs前端开发工具构建工具插件系统在 WXT 浏览器扩展中使用 Reactwxt-dev/module-react 模块完整指南在 WXT 浏览器扩展中使用 Reactwxt dev/module react 模块完整指南 本指南围绕 WXT 官方的 React 支持模块 wxt前端开发工具构建工具插件系统Swagger Codegen 枚举数组模型 EnumArrays 详解从 OpenAPI 定义到 Jersey2 Java 客户端代码生成Swagger Codegen 枚举数组模型 EnumArrays 详解从 OpenAPI 定义到 Jersey2 Java 客户端代码生成 导读 本文以 s开发工具代码生成API设计上一篇MetaAgent vs AgentHiveAssetOpsBench多代理协作蓝图终极对比指南下一篇ESP-IDF 蓝牙 HCI Vendor-specificVS命令与事件完全指南从协议背景到源码级解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表