@xiao-ying/miniapp-vite
v1.0.0
Published
Reusable Vite config helpers for XiaoYing miniapps
Readme
@xiao-ying/miniapp-vite
给小应小程序项目复用的 Vite 配置工具集,当前主要提供两类能力:
createManualChunks:基于包名生成稳定、可读的manualChunks规则createMiniAppManualChunkGroups:小应项目常用 chunk 分组预设normalizeRouterBase:统一规范化base/router base字符串
该包刻意只按包名匹配,不对原始模块路径做 includes() 一类模糊判断,避免误伤诸如 react-photo-view 这样的包。
安装
在模板仓库或 SDK monorepo 内使用 workspace 依赖:
{
"devDependencies": {
"@xiao-ying/miniapp-vite": "workspace:*"
}
}在独立项目中使用本地路径依赖:
{
"devDependencies": {
"@xiao-ying/miniapp-vite": "file:../xiaoying-miniapp-sdk/vite"
}
}快速使用
import { defineConfig, loadEnv } from 'vite'
import {
createManualChunks,
createMiniAppManualChunkGroups,
normalizeRouterBase,
} from '@xiao-ying/miniapp-vite'
const manualChunks = createManualChunks(createMiniAppManualChunkGroups())
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd())
return {
base: normalizeRouterBase(env.VITE_BASE_URL ?? env.VITE_ROUTER_BASE),
build: {
rollupOptions: {
output: {
manualChunks,
},
},
},
}
})API
createManualChunks(groups)
创建一个可直接传给 build.rollupOptions.output.manualChunks 的函数。
type PackageMatcher =
| string
| { type: 'exact'; value: string }
| { type: 'prefix'; value: string }
| { type: 'scope'; value: string }
| { type: 'regex'; value: RegExp }
type ManualChunkGroup = {
chunkName: string
matchers: readonly PackageMatcher[]
}匹配行为基于 node_modules 中解析出的包名:
exact('react')只命中reactprefix('remark-')可命中remark-gfmscope('@xiao-ying')可命中@xiao-ying/*regex(/^micromark/)可命中micromark-*
createMiniAppManualChunkGroups(options?)
返回一组适合小应小程序项目的默认 chunk 分组预设,当前包括:
react-vendorxy-runtimexy-appxy-clouddata-vendorzod-vendorform-vendor
推荐用法:
const manualChunks = createManualChunks(createMiniAppManualChunkGroups())如果项目只想在预设基础上做少量调整,可以传配置对象:
import { exact, prefix } from '@xiao-ying/miniapp-vite'
const manualChunks = createManualChunks(
createMiniAppManualChunkGroups({
exclude: ['data-vendor'],
overrides: {
'xy-app': {
appendMatchers: [exact('@xiao-ying/miniapp-browser-bootstrap')],
},
'form-vendor': {
chunkName: 'draft-vendor',
},
},
extraGroups: [
{
chunkName: 'markdown-vendor',
matchers: [exact('react-markdown'), prefix('remark-'), prefix('rehype-')],
},
],
})
)支持的选项:
include:只保留指定的预设分组exclude:排除指定的预设分组overrides:按分组名覆盖默认配置overrides.<group>.chunkName:重命名某个预设 chunkoverrides.<group>.matchers:完全替换某个预设分组的 matcher 列表overrides.<group>.appendMatchers:在默认 matcher 后面追加 matcherextraGroups:在预设分组后追加额外分组
getNodeModulePackageName(id)
从 Rollup/Vite 模块 id 中提取包名,兼容:
- pnpm
.pnpm/.../node_modules/...结构 - 普通
node_modules/... - workspace 包真实路径(如 monorepo 内的 sibling package)
- Windows 路径
- 带
?query/#hash的 id
normalizeRouterBase(value)
将 base 规范化为:
- 空值、
/、./->/ - 其他值统一转成以
/开头、以/结尾
Matcher Helpers
exact(value)prefix(value)scope(value)regex(value)
