# @42-central/vite-plugin-theme 中文文档

规范地址：https://npmcn.com/package/%4042-central/vite-plugin-theme/

版本：0\.26\.0
npm 元数据更新时间：2026-11-04T16:51:39.476Z
中文译文更新时间：2026-11-08T00:01:12.884Z
软件包许可：UNLICENSED

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%4042-central/vite-plugin-theme
原文对照：https://npmcn.com/package/%4042-central/vite-plugin-theme/?lang=original

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：16.1 kB，8 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：1 个
- peer 依赖：vite ^7\.0\.0 \|\| ^8\.0\.0
- 首次发布：2026-10-08T14:41:50.005Z
- 最新版本发布：2026-11-04T16:51:39.178Z
- 近 30 天下载量：1966（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：18（近 12 个月 18 个）

## 中文简介

将@42/ui-react的反FOUC主题 init脚本注入索引.html的Vite插件

## 安装

```sh
npm install @42-central/vite-plugin-theme
```

也可以使用：`pnpm add @42-central/vite-plugin-theme`、`yarn add @42-central/vite-plugin-theme`、`bun add @42-central/vite-plugin-theme`

## README

![@42-central/vite-plugin-theme](https://shieldcn.dev/header/dots.svg?title=Vite+Plugin+Theme&subtitle=Flash-free+theme+init+for+Vite&logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAMgAAADIBAMAAABfdrOtAAAAMFBMVEUAAAD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F87TQQwAAAAD3RSTlMAAw4fKzNGVm%2BMn73c6vz7344aAAACqklEQVR42u3ZMWsUQRjG8ed9jaA2N5fWQswnEMVG1I9gpXZKvsGdnVZ3VpdClBQi2KlgI5b2fgobI3baOXOI3mJgx5Bb8Hb21tkwN2%2BMef%2BQIrs7PPyyaY6DpmmapmmapmmHnUH%2BiDbCMG89vH4xvHC%2BM%2BTqp6APNL%2FxOLzxKLzwlQBGPPr%2BaiPoeQ%2F7hcSzjScNuo30rpzz1ju4%2Bc9es22Hee7Pde%2B929p7cvGa9egWnfhs%2FWKl3zTYzzyxtRsFrvt65YwA7gQxWGxavHBY1nTLYFnc4Y28nGIxbx70sCx%2F%2BiFiI90h222QXnwkHeJaRgQgYAEIWAACFoCABSBgAQhYAAIWgIAFIGABCFgAAhaAgAUgYAEIWAACFoCABSDgdMiZGAScDnkWg4DTIfdcdEQAAhaAgBMh1AECToOgCwScBkEIMS0jKZDdEOLQMXOt9LXsjLC8C%2BHRgQ2O%2FqCun0eGBp2ik7Z5NBUSZu42jirkH4P8lIBsKkQhhwwpJCBjhShEIX%2BDWAHIN4Xov9YRfiMSEF9QP1IKpGqIlUFMC6T8dflWpJvV0Rvh3%2BBLACGqnhyFkNLH2qXgm6Aq%2Bz6ETKjtIzYiebRFrv7rbAiAkbXefWQfodmoGskOAeeFjF01khPiTe4RKsZT5B7pTbzJPULFcA4BC0DAAhCwAAQsAAHng1iTe4SKASEYyQBxJhjJCwELQMACELAABCwAAQtAwAIQcDZIOOJtrCQI1gCgv1rIaGrQkHx8E%2ButPxDEoDHiXt%2BOdedAb2QKNCXUj7SOJAg4%2Bb3HIWCsuGKA7CN%2B4gzC1rDSzKkhsOIR9%2FQd6pFHvdInS3Z20CFGUtSPZZAs8VZAAuiIjuiIjuiIjuiIjhyfEVvLIUN8KQxHtX6QgaZpmqZpmqZpmvbf9xsJbA7rTAka4wAAAABJRU5ErkJggg%3D%3D&mode=dark&font=fira-code)

[![npm version](https://shieldcn.dev/npm/v/@42-central/vite-plugin-theme.svg)](https://www.npmjs.com/package/@42-central/vite-plugin-theme) [![Vite 7 | 8](https://shieldcn.dev/badge/Vite-7_%7C_8-9135ff.svg?logo=vite)](https://vite.dev/) ![ESM only](https://shieldcn.dev/badge/module-ESM--only-F7DF1E.svg)

[安装](https://npmcn.com/package/%4042-central/vite-plugin-theme/#readme-install) • 妇女 [使用量](https://npmcn.com/package/%4042-central/vite-plugin-theme/#readme-usage) • 妇女 [选项](https://npmcn.com/package/%4042-central/vite-plugin-theme/#readme-options) • 妇女 [**他们的博士们..**](https://42kit.dev/docs/theming)

* * *

停止的 Vite 插件 [`@42-central/ui-react`](https://www.npmjs.com/package/@42-central/ui-react) 应用程序在加载时闪出错误的主题。 里面放的是工具箱的主题动画脚本 在顶端 `<head>` 内 `index.html`,两者中 `vite dev` 财务报告和审定财务报表 `vite build`。 。 。 .

## 为什么

`useTheme()` 存储访客的 `"light" | "dark" | "system"` 选择和选择 保留 `data-theme` 打开 `<html>` 同步。 只有在第一次喷漆后才会反应, 虽然. 所以,没有帮助,一个黑暗模式的访客 看到一个光框之前 钩子赶上了.

在下一个.js, `<ThemeScript />` 覆盖从服务器渲染的漏洞。 一个虚拟 SPA 没有服务器渲染,所以脚本必须坐入 `index.html` 块 解析。 这不可能 `type="module"`,因为 Vite 推迟模块 剧本,而闪光又回来了. 此插件注入经典内线 `<script>` 通过Vite的 `transformIndexHtml` 钩子,所以你从来不编辑 HTML是手边的.

## 安装

安装为 dev 依赖, 套件旁边 :

```bash
npm install -D @42-central/vite-plugin-theme
pnpm add -D @42-central/vite-plugin-theme
yarn add --dev @42-central/vite-plugin-theme
bun add --dev @42-central/vite-plugin-theme
```

`vite` 7或8是一种同龄依赖. 插件用 `@42-central/ui-react`,它将其列为自己的依赖。 都留着 同版本的软件包:它们一起发行.

## 使用量

```ts
// vite.config.ts
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import { themeInitPlugin } from "@42-central/vite-plugin-theme";

export default defineConfig({
  plugins: [react(), themeInitPlugin()],
});
```

然后读取并更改主题 从任何组件与工具包的钩:

```tsx
import { useTheme } from "@42-central/ui-react";

export function ThemeToggle() {
  const { resolvedTheme, setMode } = useTheme();
  return (
    <button onClick={() => setMode(resolvedTheme === "dark" ? "light" : "dark")}>
      Toggle theme
    </button>
  );
}
```

## 选项

`themeInitPlugin(options?)` 和工具箱一样 `buildThemeInitScript()`附加时 `nonce`数字 :

| 选项 | 类型 | 默认 | 它会做什么 |
| --- | --- | --- | --- |
| `storageKey` | `string` | `"ui-theme"` | `localStorage` 键,该键持有存储模式. |
| `defaultColorScheme` | `"light" | "dark" | "system"` | `"system"` | 尚未存储时使用的模式 . |
| `forceColorScheme` | `"light" | "dark"` | – 说吧 – | 绑定主题并忽略存储和OS偏好. |
| `attribute` | `"data-theme" | "class"`,或者其中的数组 | `"data-theme"` | 写什么 `<html>`页:1 `data-theme` 属性, a `.dark` 或两者兼有. |
| `nonce` | `string` | – 说吧 – | 注入的CSP 非ce `<script>`。 。 。 . |

### 保持与 `useTheme()`

没有提供者持有此配置, 所以脚本和钩子 无法分享 过 `storageKey`, (中文(简体) ), `defaultColorScheme`, (中文(简体) ), `forceColorScheme` 财务报告和审定财务报表 `attribute` 与 **相同数值** 到插件和每个 `useTheme()` 电话 如果两者不同,剧本和钩子先有分歧 装入.

```ts
// vite.config.ts
themeInitPlugin({ forceColorScheme: "dark", attribute: ["class", "data-theme"] });
```

```tsx
// anywhere in the app
useTheme({ forceColorScheme: "dark", attribute: ["class", "data-theme"] });
```

共享 `const THEME_OPTIONS = { … }` 两个文件导入最简单 如何保持他们的一致.

### 内容安全政策

如果您的 CSP 屏蔽了内置脚本, 请通过您的服务器在 `script-src` 指令 :

```ts
themeInitPlugin({ nonce: "{{CSP_NONCE}}" });
```

值进入已建 `index.html` 逐字记录。 使用任意占位符 您的服务器或边缘功能将替换每个请求.

## 注射什么药

一个标签,第一个在 `<head>`数字 :

```html
<head>
  <script>/* ~600 bytes: read localStorage, resolve "system", set data-theme */</script>
  <!-- the rest of your head -->
</head>
```

剧本运行一次,没有收听者。 选择操作系统 装入后继续运行 `useTheme()`这是工作.

## 不使用维特?

这个 [反射读取](https://github.com/42staff/kit/blob/main/packages/react/README.md#vite-client-only-spa) 涵盖替代品:预建 `theme-init.js` 复制到 `public/`, (中文(简体) ), 或粘贴输出 `buildThemeInitScript()` 手边。 Next.js 应用程序使用 `<ThemeScript />` 换句话说.

## 链接

-   [他们的文档](https://42kit.dev/docs/theming)
-   [`@42-central/ui-react`](https://www.npmjs.com/package/@42-central/ui-react)
-   [来源于 GitHub](https://github.com/42staff/kit/tree/main/packages/vite-plugin-theme)

## 常见问题

### @42-central/vite-plugin-theme 是什么？

将@42/ui-react的反FOUC主题 init脚本注入索引\.html的Vite插件

### 如何安装 @42-central/vite-plugin-theme？

在项目目录运行 npm install @42-central/vite-plugin-theme，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：vite（^7\.0\.0 \|\| ^8\.0\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @42-central/vite-plugin-theme 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @42-central/vite-plugin-theme 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @42-central/vite-plugin-theme 可以商用吗？

@42-central/vite-plugin-theme 使用 UNLICENSED 许可。作者声明为 UNLICENSED，即不授予公开使用许可（与公共领域的 Unlicense 不同）。使用前需获得作者授权。以上为概括，不构成法律意见，请以许可原文为准。

### @42-central/vite-plugin-theme 的下载量有多少？

根据 npm 官方下载统计，@42-central/vite-plugin-theme 在 2026/10/05 – 2026/11/03 这 30 天内被下载 1,966 次，日均约 66 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @42-central/vite-plugin-theme 还在维护吗？

最新版本 0\.26\.0 发布于 2026/11/05（3 天前）；至今共发布 18 个版本，其中过去 12 个月发布了 18 个；首次发布于 2026/10/08。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

