@hzab/vite-config 0.0.2-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +83 -0
- package/LICENSE +21 -0
- package/README.md +173 -0
- package/dist/create-app-vite-config.cjs +426 -0
- package/dist/create-app-vite-config.cjs.map +1 -0
- package/dist/create-app-vite-config.d.cts +19 -0
- package/dist/create-app-vite-config.d.ts +19 -0
- package/dist/create-app-vite-config.js +415 -0
- package/dist/create-app-vite-config.js.map +1 -0
- package/dist/create-library-vite-config.cjs +281 -0
- package/dist/create-library-vite-config.cjs.map +1 -0
- package/dist/create-library-vite-config.d.cts +31 -0
- package/dist/create-library-vite-config.d.ts +31 -0
- package/dist/create-library-vite-config.js +268 -0
- package/dist/create-library-vite-config.js.map +1 -0
- package/dist/create-package-vitest-config.cjs +73 -0
- package/dist/create-package-vitest-config.cjs.map +1 -0
- package/dist/create-package-vitest-config.d.cts +12 -0
- package/dist/create-package-vitest-config.d.ts +12 -0
- package/dist/create-package-vitest-config.js +67 -0
- package/dist/create-package-vitest-config.js.map +1 -0
- package/dist/create-vite-config.cjs +438 -0
- package/dist/create-vite-config.cjs.map +1 -0
- package/dist/create-vite-config.d.cts +17 -0
- package/dist/create-vite-config.d.ts +17 -0
- package/dist/create-vite-config.js +427 -0
- package/dist/create-vite-config.js.map +1 -0
- package/dist/index.cjs +631 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +16 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +603 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/copy.cjs +16 -0
- package/dist/plugins/copy.cjs.map +1 -0
- package/dist/plugins/copy.d.cts +18 -0
- package/dist/plugins/copy.d.ts +18 -0
- package/dist/plugins/copy.js +13 -0
- package/dist/plugins/copy.js.map +1 -0
- package/dist/plugins/hash-deploy.cjs +128 -0
- package/dist/plugins/hash-deploy.cjs.map +1 -0
- package/dist/plugins/hash-deploy.d.cts +56 -0
- package/dist/plugins/hash-deploy.d.ts +56 -0
- package/dist/plugins/hash-deploy.js +119 -0
- package/dist/plugins/hash-deploy.js.map +1 -0
- package/dist/plugins/less-tilde.cjs +32 -0
- package/dist/plugins/less-tilde.cjs.map +1 -0
- package/dist/plugins/less-tilde.d.cts +36 -0
- package/dist/plugins/less-tilde.d.ts +36 -0
- package/dist/plugins/less-tilde.js +29 -0
- package/dist/plugins/less-tilde.js.map +1 -0
- package/dist/plugins/lifecycle.cjs +28 -0
- package/dist/plugins/lifecycle.cjs.map +1 -0
- package/dist/plugins/lifecycle.d.cts +20 -0
- package/dist/plugins/lifecycle.d.ts +20 -0
- package/dist/plugins/lifecycle.js +26 -0
- package/dist/plugins/lifecycle.js.map +1 -0
- package/dist/plugins/public-assets.cjs +28 -0
- package/dist/plugins/public-assets.cjs.map +1 -0
- package/dist/plugins/public-assets.d.cts +17 -0
- package/dist/plugins/public-assets.d.ts +17 -0
- package/dist/plugins/public-assets.js +26 -0
- package/dist/plugins/public-assets.js.map +1 -0
- package/dist/plugins/public-config.cjs +31 -0
- package/dist/plugins/public-config.cjs.map +1 -0
- package/dist/plugins/public-config.d.cts +20 -0
- package/dist/plugins/public-config.d.ts +20 -0
- package/dist/plugins/public-config.js +29 -0
- package/dist/plugins/public-config.js.map +1 -0
- package/dist/plugins/react-compiler.cjs +22 -0
- package/dist/plugins/react-compiler.cjs.map +1 -0
- package/dist/plugins/react-compiler.d.cts +24 -0
- package/dist/plugins/react-compiler.d.ts +24 -0
- package/dist/plugins/react-compiler.js +16 -0
- package/dist/plugins/react-compiler.js.map +1 -0
- package/dist/plugins/relative-base.cjs +19 -0
- package/dist/plugins/relative-base.cjs.map +1 -0
- package/dist/plugins/relative-base.d.cts +9 -0
- package/dist/plugins/relative-base.d.ts +9 -0
- package/dist/plugins/relative-base.js +17 -0
- package/dist/plugins/relative-base.js.map +1 -0
- package/dist/plugins/stub-less.cjs +26 -0
- package/dist/plugins/stub-less.cjs.map +1 -0
- package/dist/plugins/stub-less.d.cts +9 -0
- package/dist/plugins/stub-less.d.ts +9 -0
- package/dist/plugins/stub-less.js +24 -0
- package/dist/plugins/stub-less.js.map +1 -0
- package/dist/plugins/svg-react.cjs +70 -0
- package/dist/plugins/svg-react.cjs.map +1 -0
- package/dist/plugins/svg-react.d.cts +28 -0
- package/dist/plugins/svg-react.d.ts +28 -0
- package/dist/plugins/svg-react.js +63 -0
- package/dist/plugins/svg-react.js.map +1 -0
- package/dist/svg-react-runtime.cjs +4 -0
- package/dist/svg-react-runtime.cjs.map +1 -0
- package/dist/svg-react-runtime.d.cts +2 -0
- package/dist/svg-react-runtime.d.ts +2 -0
- package/dist/svg-react-runtime.js +3 -0
- package/dist/svg-react-runtime.js.map +1 -0
- package/dist/types.cjs +4 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +291 -0
- package/dist/types.d.ts +291 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/vitest-types.cjs +4 -0
- package/dist/vitest-types.cjs.map +1 -0
- package/dist/vitest-types.d.cts +22 -0
- package/dist/vitest-types.d.ts +22 -0
- package/dist/vitest-types.js +3 -0
- package/dist/vitest-types.js.map +1 -0
- package/dist/vitest.cjs +73 -0
- package/dist/vitest.cjs.map +1 -0
- package/dist/vitest.d.cts +4 -0
- package/dist/vitest.d.ts +4 -0
- package/dist/vitest.js +67 -0
- package/dist/vitest.js.map +1 -0
- package/docs/README.md +15 -0
- package/docs/abt-management-ui/vite.config.mts +226 -0
- package/docs/api.md +366 -0
- package/docs/migration-from-webpack.md +722 -0
- package/docs/sync-public-path.md +52 -0
- package/docs/vite-config-integration.md +476 -0
- package/docs/vite-pnpm-integration.md +279 -0
- package/docs/vs-ccc-vite-config.md +26 -0
- package/docs/webpack-gap.md +107 -0
- package/package.json +113 -0
- package/src/client.d.ts +9 -0
- package/src/create-app-vite-config.ts +218 -0
- package/src/create-library-vite-config.ts +199 -0
- package/src/create-package-vitest-config.ts +54 -0
- package/src/create-vite-config.ts +22 -0
- package/src/index.ts +42 -0
- package/src/plugins/copy.ts +25 -0
- package/src/plugins/hash-deploy.ts +199 -0
- package/src/plugins/less-tilde.ts +44 -0
- package/src/plugins/lifecycle.ts +40 -0
- package/src/plugins/public-assets.ts +28 -0
- package/src/plugins/public-config.ts +34 -0
- package/src/plugins/react-compiler.ts +32 -0
- package/src/plugins/relative-base.ts +20 -0
- package/src/plugins/stub-less.ts +26 -0
- package/src/plugins/svg-react.ts +90 -0
- package/src/svg-react-runtime.ts +4 -0
- package/src/svg-react.d.ts +6 -0
- package/src/types.ts +314 -0
- package/src/vitest-types.ts +20 -0
- package/src/vitest.ts +2 -0
- package/templates/src/vite-env.d.ts +2 -0
- package/templates/tsconfig.json +12 -0
- package/templates/vite.config.ts +26 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
- 工厂注入 `import.meta.env.PUBLIC_PATH`:相对 Hash 为 `./{hash}/`,供根入口 JS `fetch`
|
|
6
|
+
静态文件;不改 Vite `base` / `BASE_URL`。HTML 子目录模板 `PUBLIC_PATH` 仍为 `./`。
|
|
7
|
+
类型入口:`@hzab/vite-config/client`。
|
|
8
|
+
|
|
9
|
+
## 0.0.2-alpha.0
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- less ~ 编译问题修复
|
|
14
|
+
|
|
15
|
+
## 0.0.1
|
|
16
|
+
|
|
17
|
+
首个发布于企业私有 npm Registry 的版本(阿里云企业版 Packages,ld / old 双实例)。版本线从
|
|
18
|
+
本仓库独立开始,迁移自旧 `@ccc` 仓库的既有能力随本版本一并提供:
|
|
19
|
+
|
|
20
|
+
- api-extractor 注释类警告清零:主入口导出符号统一补 `@public` release tag(overloaded 函数
|
|
21
|
+
`createHashBuildDirName` 每个 overload 均带);`@default` 全部改标准 TSDoc `@defaultValue`;
|
|
22
|
+
注释中的 `@vitejs/plugin-react` 以反引号包裹转义。api-report 零警告(此前为 warning 级不阻塞)。
|
|
23
|
+
|
|
24
|
+
- 文档化 `createViteConfig` 与 `createAppViteConfig` 的默认值差异:默认工厂
|
|
25
|
+
`reactCompiler: false` / `openBrowser: false`(`rootDir` / `command` / `mode` 默认
|
|
26
|
+
`process.cwd()` / `"serve"` / `"development"`);完整工厂 `reactCompiler: "build-only"` /
|
|
27
|
+
`openBrowser: true`(前三项必填)。README 与 docs/api.md 同步补充对照表与显式覆盖说明。
|
|
28
|
+
|
|
29
|
+
- `@hzab/vite-config/svg-react` 补齐运行时入口(空模块),子路径现在可被 import / require
|
|
30
|
+
解析;并文档化消费方引用方式:tsconfig `types` 数组、`/// <reference types=... />` 或副作用
|
|
31
|
+
导入。类型声明内容不变(`*.svg?react` → `FunctionComponent<SVGProps<SVGSVGElement>>`)。
|
|
32
|
+
|
|
33
|
+
- Hash 目录时间戳支持 `hashTimestamp: "datetime"`:本地时区 `YYYY-MM-DD-HH-mm-ss` 作为子目录名;
|
|
34
|
+
默认仍为毫秒 epoch。`hashCleanup` 同时识别两种格式,并按真实时间排序。
|
|
35
|
+
`createHashBuildDirName` 增加 `{ repositoryRoot?, now?, timestampFormat? }` 选项重载。
|
|
36
|
+
|
|
37
|
+
- 新增通用复制插件 `copyPlugin` 与工厂选项 `copy`:封装 `vite-plugin-static-copy`,可传完整选项或
|
|
38
|
+
`targets` 数组;`publicAssetsPlugin` / `publicConfigPlugin` 改为基于它组装。
|
|
39
|
+
- 新增 `htmlData`:注入 HTML 模板 EJS 数据,与内置 `PUBLIC_PATH` 合并;`PUBLIC_PATH` 始终由工厂
|
|
40
|
+
按 base / Hash 计算。
|
|
41
|
+
|
|
42
|
+
- 新增 `createLibraryViteConfig` 组件库工厂:build 默认 UMD 产出 `lib/index.js`,外置
|
|
43
|
+
`react` / `react-dom`(含子路径);serve 为预览应用、不外置、无 Hash。`externals` 整表替换
|
|
44
|
+
默认值;不默认 `example/` 或 antd / Formily。UMD / IIFE build 须传 `name`。
|
|
45
|
+
|
|
46
|
+
- 新增 `onRun` / `onDone` 构建生命周期回调(对齐 webpack):仅 `command === "build"` 时挂载;
|
|
47
|
+
`onDone` 排在 Hash 根入口 / `hash.txt` 写入之后,写入失败不调用。独立插件
|
|
48
|
+
`lifecyclePlugin()`;Hash 插件 `writeBundle` 改为 sequential post。
|
|
49
|
+
|
|
50
|
+
- 新增可选 SVG 组件通道:`svgr` / `svgReactPlugin` 将 `*.svg?react` 编成 React 组件;
|
|
51
|
+
普通 `*.svg` 仍走 Vite 默认 URL。默认关闭,不搬 webpack 的 `?svgEle`;`@svgr/*` 为可选
|
|
52
|
+
peer,仅在真正转换时加载。类型入口:`@hzab/vite-config/svg-react`。
|
|
53
|
+
- 支持独立 npm 发布:入口改为 `dist/` ESM 与类型声明,增加受限 `exports`、发布前构建及
|
|
54
|
+
public access 配置;保留根入口、`/vitest` 与 `/src/*` 兼容入口,并随包提供 `src/`
|
|
55
|
+
供 source map 调试和源码查看。
|
|
56
|
+
- 新增 `createPackageVitestConfig` 默认值/合并顺序,以及 `publicAssetsPlugin` /
|
|
57
|
+
`publicConfigPlugin` 复制结果的独立回归测试。
|
|
58
|
+
- 新增 React Compiler 的 build / serve 转换回归:覆盖插件开关分支,并用 React 17 风格
|
|
59
|
+
函数组件验证 `reactCompiler: true` 下的最小构建与开发转换;默认仍为 `"build-only"`。
|
|
60
|
+
- `stubLessPlugin()` 现在为 `.module.less` 提供 identity 默认导出,支持测试代码通过
|
|
61
|
+
`styles.foo` 获取稳定类名;普通 Less 仍作为空模块处理。
|
|
62
|
+
- Hash 目录的 commit hash 默认从应用 `rootDir` 获取,并新增 `repositoryRoot` 显式仓库目录;
|
|
63
|
+
`getCommitHash` / `createHashBuildDirName` 同步支持仓库目录,不再依赖进程工作目录。
|
|
64
|
+
- 新增 `hashCleanup: { keep }`:Hash 构建成功后可按消费方配置保留最新版本;默认不清理,
|
|
65
|
+
且只删除工厂命名的旧 Hash 目录。
|
|
66
|
+
- 移除未接入工厂的 `HashDeployOptions` 公开类型;Hash 部署继续使用
|
|
67
|
+
`CreateAppViteConfigOptions` 顶层的 `hashDeploy` 与 `deployRoot` 配置。
|
|
68
|
+
- `createPackageVitestConfig` 改用 Vitest 的 `ViteUserConfig`,让 `vite` 覆盖、
|
|
69
|
+
`configure` 回调、工厂返回值及内置 `test` 配置保持类型安全;并迁至独立
|
|
70
|
+
`@hzab/vite-config/vitest` 入口,避免根入口产生 Vitest 类型依赖。
|
|
71
|
+
- 修复相对 Hash 部署中子目录入口的 `PUBLIC_PATH` 重复 Hash,并让根入口统一改写
|
|
72
|
+
`assets/`、`public/`、`config/` 等相对资源引用。
|
|
73
|
+
- 将入口模块静态加载的 Vite 插件声明为必装 peer;仅保留 `vitest` 为 optional peer。
|
|
74
|
+
- 新增 `base`:可直接设置构建资源公共路径(含 HTTPS/CDN 目录);`hashDeploy` 下实际为
|
|
75
|
+
`{base}{hash}/`,并放宽插件对最终 `base` 的校验。
|
|
76
|
+
- `createAppViteConfig` 返回值增加只读 `buildDirHash`(本次 hash 子目录名;未启用时为 `""`)。
|
|
77
|
+
- 新增 `deployRoot`:可配置构建产物根目录(hash 模式下为 hash 子目录与根入口的父目录,默认 `"dist"`)。
|
|
78
|
+
- 开发服务器默认自动打开浏览器(`openBrowser` / `server.open`);传 `false` 可关闭。
|
|
79
|
+
- 修复 Hash 部署对 `dist/` 的硬编码,改为从 Vite 最终配置解析部署目录。
|
|
80
|
+
- Hash 子目录改用 Vite 原生相对 `base`,根入口按最终 `assetsDir` 增加 Hash 前缀,并校验
|
|
81
|
+
`root`、`base` 与 `outDir` 契约。
|
|
82
|
+
- 所有非 Hash build 同样默认使用 `base: "./"`,避免产物依赖站点根路径。
|
|
83
|
+
- 增加 Hash 构建、定制部署根目录和非法 `outDir` 的集成测试。
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 CaiYansong
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# @hzab/vite-config
|
|
2
|
+
|
|
3
|
+
可发布的 Vite / Vitest 配置组件:工厂 + 可组合插件。消费方传入策略。
|
|
4
|
+
|
|
5
|
+
默认工厂 `createViteConfig(options?)` 适合新项目;完整控制仍使用 `createAppViteConfig`。初始化文件见 [`templates/`](./templates/)。
|
|
6
|
+
|
|
7
|
+
## 安装
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm add @hzab/vite-config
|
|
11
|
+
# peer:vite、@vitejs/plugin-react、@vitejs/plugin-basic-ssl、
|
|
12
|
+
# @rolldown/plugin-babel、vite-plugin-html、vite-plugin-static-copy
|
|
13
|
+
# 使用 Vitest 工厂时另装 vitest
|
|
14
|
+
# 使用 Vitest 工厂默认 happy-dom 环境时另装 happy-dom
|
|
15
|
+
# 使用 svgr / *.svg?react 时另装 @svgr/core、@svgr/plugin-jsx、@svgr/plugin-svgo
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
本仓通过 pnpm workspace 引用;包入口统一指向 `dist/` 编译产物。
|
|
19
|
+
|
|
20
|
+
## 发布
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# 仓库根目录
|
|
24
|
+
pnpm --filter @hzab/vite-config pack --dry-run
|
|
25
|
+
pnpm --filter @hzab/vite-config publish
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
`prepack` 会先执行 TypeScript 构建。默认入口始终使用 `dist/` 中的 ESM 与类型声明;
|
|
29
|
+
包同时包含 `src/`,便于 source map 调试和源码查看,不要求消费方编译 TypeScript。
|
|
30
|
+
`@hzab/vite-config/src/*` 兼容入口仍解析到 `dist/`,不会绕过编译产物。作用域包默认按
|
|
31
|
+
public access 发布;若使用私有 registry,请在发布环境覆盖对应 npm 配置。
|
|
32
|
+
|
|
33
|
+
## 快速使用
|
|
34
|
+
|
|
35
|
+
### 应用 Vite
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
import path from "node:path";
|
|
39
|
+
import { defineConfig } from "vite";
|
|
40
|
+
import { createAppViteConfig } from "@hzab/vite-config";
|
|
41
|
+
|
|
42
|
+
export default defineConfig(({ command, mode }) =>
|
|
43
|
+
createAppViteConfig({
|
|
44
|
+
rootDir: __dirname,
|
|
45
|
+
command,
|
|
46
|
+
mode,
|
|
47
|
+
alias: {
|
|
48
|
+
"@": path.resolve(__dirname, "./src"),
|
|
49
|
+
"@hzab/utils": path.resolve(__dirname, "./packages/utils/src/index.ts"),
|
|
50
|
+
"@hzab/utils/src": path.resolve(__dirname, "./packages/utils/src"),
|
|
51
|
+
},
|
|
52
|
+
useHttps: true,
|
|
53
|
+
// openBrowser: false, // 默认 true;关闭自动打开浏览器
|
|
54
|
+
hashDeploy: mode !== "development",
|
|
55
|
+
// repositoryRoot: path.resolve(__dirname, "../.."), // 应用位于仓库子目录时显式指定
|
|
56
|
+
hashCleanup: { keep: 3 }, // 可选;成功构建后保留最新 3 个 Hash 版本
|
|
57
|
+
// hashTimestamp: "datetime", // 可选;目录名用本地 YYYY-MM-DD-HH-mm-ss 代替毫秒时间戳
|
|
58
|
+
publicConfig: { mode },
|
|
59
|
+
// copy: [{ src: "vendor/assets/**/*", dest: "vendor" }],
|
|
60
|
+
// htmlData: { APP_TITLE: "My App" },
|
|
61
|
+
// svgr: true, // 启用 import Icon from "./icon.svg?react";需可选 peer @svgr/*
|
|
62
|
+
// plugins / vite / configure 可继续扩展
|
|
63
|
+
}),
|
|
64
|
+
);
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
`createAppViteConfig` 默认 `openBrowser: true`(开发启动自动打开浏览器)与
|
|
68
|
+
`reactCompiler: "build-only"`(仅生产构建启用)。默认工厂 `createViteConfig` 面向新项目,
|
|
69
|
+
两处默认值不同:
|
|
70
|
+
|
|
71
|
+
| 选项 | `createViteConfig`(默认工厂) | `createAppViteConfig`(完整工厂) |
|
|
72
|
+
| ------------------------------ | --------------------------------------------- | --------------------------------- |
|
|
73
|
+
| `openBrowser` | `false`(不自动打开浏览器) | `true`(开发启动自动打开) |
|
|
74
|
+
| `reactCompiler` | `false`(关闭) | `"build-only"`(仅 build 启用) |
|
|
75
|
+
| `rootDir` / `command` / `mode` | `process.cwd()` / `"serve"` / `"development"` | 必填,无默认 |
|
|
76
|
+
|
|
77
|
+
其余选项默认值两工厂一致。显式传入的选项始终生效(`createViteConfig` 内部最后展开
|
|
78
|
+
`options`);需要完整工厂行为时传 `openBrowser: true`、`reactCompiler: "build-only"`。
|
|
79
|
+
|
|
80
|
+
Hash 部署使用 Vite 原生 `base`,默认输出
|
|
81
|
+
`dist/<hash>/`、`dist/index.html` 与 `dist/hash.txt`。可用 `deployRoot` 改父目录(如
|
|
82
|
+
`artifacts`);若经 `configure` 自定义 `build.outDir`,必须保留末级 `<hash>` 目录。本次
|
|
83
|
+
hash 目录名也可从返回值的 `buildDirHash` 读取。JS 里用 `import.meta.env.PUBLIC_PATH`
|
|
84
|
+
(相对 Hash 为 `./{hash}/`)拼 `public/` 等静态文件,不要用 `BASE_URL`;类型入口
|
|
85
|
+
`@hzab/vite-config/client`。默认永久保留旧版本;消费方可通过
|
|
86
|
+
`hashCleanup: { keep }` 配置成功构建后的保留数量。commit hash 默认从 `rootDir` 获取,也可用
|
|
87
|
+
`repositoryRoot` 指定仓库目录,不依赖启动命令的工作目录。默认目录名为
|
|
88
|
+
`{commit}-{Date.now()}`;`hashTimestamp: "datetime"` 时改为本地时区
|
|
89
|
+
`{commit}-YYYY-MM-DD-HH-mm-ss`。详见
|
|
90
|
+
[Hash 部署契约](./docs/api.md#hash-部署契约)。
|
|
91
|
+
|
|
92
|
+
所有 build 默认使用 `base: "./"`。若产物部署在固定 HTTPS/CDN 目录,直接传工厂选项
|
|
93
|
+
`base: "https://cdn.example.com/app/"`;启用 `hashDeploy` 时实际前缀为 `{base}{hash}/`。
|
|
94
|
+
|
|
95
|
+
### `*.svg?react` 类型声明
|
|
96
|
+
|
|
97
|
+
启用 `svgr` 后,`import Logo from "./logo.svg?react"` 的模块类型由
|
|
98
|
+
`@hzab/vite-config/svg-react` 提供。该入口是纯类型入口(运行时为空模块,不导出任何
|
|
99
|
+
运行时逻辑),声明 `*.svg?react` 默认导出 `FunctionComponent<SVGProps<SVGSVGElement>>`;
|
|
100
|
+
普通 `*.svg` 仍走 Vite 默认 URL 类型。消费方任选一种方式引用:
|
|
101
|
+
|
|
102
|
+
```ts
|
|
103
|
+
// 方式一:tsconfig `compilerOptions.types` 数组
|
|
104
|
+
// "types": ["node", "@hzab/vite-config/svg-react", ...]
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
```ts
|
|
108
|
+
// 方式二:任意 .ts/.tsx 文件顶部三斜线引用
|
|
109
|
+
/// <reference types="@hzab/vite-config/svg-react" />
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
```ts
|
|
113
|
+
// 方式三:副作用导入(与方式一/二等价,仅加载类型声明)
|
|
114
|
+
import "@hzab/vite-config/svg-react";
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 组件库 Vite
|
|
118
|
+
|
|
119
|
+
```ts
|
|
120
|
+
import path from "node:path";
|
|
121
|
+
import { defineConfig } from "vite";
|
|
122
|
+
import { createLibraryViteConfig, DEFAULT_LIBRARY_EXTERNALS } from "@hzab/vite-config";
|
|
123
|
+
|
|
124
|
+
export default defineConfig(({ command, mode }) =>
|
|
125
|
+
createLibraryViteConfig({
|
|
126
|
+
rootDir: __dirname,
|
|
127
|
+
command,
|
|
128
|
+
mode,
|
|
129
|
+
name: "MyLib",
|
|
130
|
+
alias: {
|
|
131
|
+
"@": path.resolve(__dirname, "./src"),
|
|
132
|
+
},
|
|
133
|
+
externals: [...DEFAULT_LIBRARY_EXTERNALS, "antd"],
|
|
134
|
+
}),
|
|
135
|
+
);
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
`vite build` 默认产出 UMD `lib/index.js`,外置 `react` / `react-dom`;`vite` 开发为预览应用,
|
|
139
|
+
不启用 lib / externals / Hash。不默认 `example/` 预览目录或 antd / Formily。详见
|
|
140
|
+
[createLibraryViteConfig](./docs/api.md#createlibraryviteconfigoptions)。
|
|
141
|
+
|
|
142
|
+
### 包 Vitest
|
|
143
|
+
|
|
144
|
+
```ts
|
|
145
|
+
import path from "node:path";
|
|
146
|
+
import { defineConfig } from "vitest/config";
|
|
147
|
+
import { createPackageVitestConfig } from "@hzab/vite-config/vitest";
|
|
148
|
+
|
|
149
|
+
export default defineConfig(
|
|
150
|
+
createPackageVitestConfig({
|
|
151
|
+
packageRoot: __dirname,
|
|
152
|
+
react: true,
|
|
153
|
+
stubLess: true,
|
|
154
|
+
alias: {
|
|
155
|
+
"@hzab/utils": path.resolve(__dirname, "../utils/src/index.ts"),
|
|
156
|
+
"@hzab/utils/src": path.resolve(__dirname, "../utils/src"),
|
|
157
|
+
},
|
|
158
|
+
include: ["test/**/*.{test.ts,test.tsx}"],
|
|
159
|
+
}),
|
|
160
|
+
);
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Vitest 工厂及其类型仅由 `@hzab/vite-config/vitest` 导出;根入口不引用 `vitest`,仅使用
|
|
164
|
+
应用 Vite 工厂时无需安装 Vitest。工厂默认 `environment: "happy-dom"`(可选 peer,使用默认
|
|
165
|
+
环境需另装 `happy-dom`);纯逻辑包可传 `environment: "node"`。启用 `stubLess` 后,普通
|
|
166
|
+
Less 导入为空模块,CSS Modules 默认导入为 identity stub(如 `styles.foo === "foo"`)。
|
|
167
|
+
|
|
168
|
+
## 自定义合并顺序
|
|
169
|
+
|
|
170
|
+
`base(options) → mergeConfig(base, vite) → configure(final)`,之后工厂写入
|
|
171
|
+
`import.meta.env.PUBLIC_PATH`(覆盖同名 `define`)。
|
|
172
|
+
|
|
173
|
+
详见 [docs/](./docs/README.md)。
|