oak-cli 更新日志
5.0.6(区间:5.0.1..HEAD)
- 后端新增 esbuild server runtime bundle 链路:模板提供 opt-in
build:bundle,输出dist/server.js、dist/package.json、dist/server-metafile.json、dist/target/*、dist/configuration/*和dist/oak-packages/*,Oak 包按package.json.oak.package元数据镜像,不再硬编码包名。项目自己的pm2.*.json按原名复制,不再生成固定pm2.prod.config.json。 - server bundle 会保持根级
configuration/*.json为运行时外部配置,生成的server.js会设置NODE_ENV、OAK_PLATFORM=server、OAK_SERVER_RUNTIME_DIR,并支持本地initialize/db:upgrade:plan命令;watch 重启、CORS 中间件顺序、nginx 后 socket public URL 和 connector-backed SSE endpoint 序列化也同步修复。 make:domain解析第三方实体时与oak-domain对齐为es/entities -> lib/entities -> src/entities,其中lib是历史兼容回退。- Oak 包编译 transform 改为读取发布包元数据,规范字段是
oak.compiler.transform;旧的needOakTransform/isLib和项目侧extraOakModules只作为兼容或非标准覆盖。 - 页面、组件和 namespace 配置进入
index.config.ts:新增CreatePageConfig、CreateComponentConfig、CreateNamespaceConfig,路由生成会写入route.access、meta.title、titleI18nKey、namespacePath和 namespace 菜单配置,生成物包括allRouters.ts与allNamespaceConfigs.ts。 route.access类型扩展为public、login、root、deny、ref、relation、operation、anyOf、allOf和数组简写;namespace 可声明route.path、first、notFound、params、菜单分组和运行时 feature 配置。- Web 渲染入口支持
web.mobile.tsx。移动宽度优先选择web.mobile.tsx -> web.tsx -> web.pc.tsx,宽屏优先选择web.pc.tsx -> web.tsx -> web.mobile.tsx,Vite render-entry invalidation 会监听这些兄弟入口增删。 - 前端编译配置新增
frontend.iconLibraries、frontend.targets.*.iconLibraries、frontend.workspaces.*.iconLibraries,namespace config 也可以声明iconLibraries。配置支持font、react、image三类图标库;font可提供style或fontUrl + icons,react可通过packageName/importPath让 web 编译按实际OakIcon字符串用量生成异步loadIcon(...)。 - Web Vite / webpack 会把编译期图标库写入
globalThis.__OAK_FRONTEND_ICON_LIBRARIES__,并为fontUrl + icons生成可注入的styleText;小程序 Vite 会把 font 图标库样式合并到 OakIcon 组件样式,并按静态<OakIcon name="...">/<oak-icon name="...">用量裁剪 glyph CSS,动态用法或无法解析字体时会回退完整样式并输出 warning。 - Web / Vite 构建新增内置 CDN 插件和共享配置层;CDN 只在 production / staging build 且项目显式配置时生效,不再默认 external React 等依赖。支持 global/UMD/IIFE、ESM、CJS,多源 fallback,
moduleStrategy: 'parallel'模块并行、dependsOn依赖图,以及 root/module 级sourceStrategy: 'race'源竞速;未知依赖和循环依赖会在配置归一化时失败。Vite 依赖升级到 8.x,补充 devtools、host/port 透传、linked package 路由依赖解析、resolve.dedupe和optimizeDeps.include的 package 收集。 - Web / MP
--analyze统一到 Oak 自研 bundle analyzer,支持 bundle treemap、源码目录、NPM 依赖、小程序分包统计、反向依赖图、稳定颜色和 canvas 缩放交互。 - 小程序配置从页面列表继续收敛到
package.config.ts:支持namespace页面范围、生成PagesDefine到typings/oak-wechat-mp-pages.d.ts,pages、subPackages、tabBar、entryPagePath、preloadRule获得类型约束。 - 小程序 Vite 构建新增 route map 虚拟模块,Oak navigator 使用 canonical route,裸
wx.navigateTo/redirectTo/reLaunch/switchTab的静态 URL 会在 script transform 中改写,无法静态识别的动态路径给出 warning。 - 小程序分包构建重写 chunk 和 asset 归属:支持普通分包 / 独立分包 JS 依赖复制、组件私有 chunk 预加载、分包 assets、包组件配置保留、独立分包
wxs/i18n.wxs复制和按输出位置注入 i18n WXS。 - 小程序页面 / 组件 JSON 可以由
index.config.ts虚拟生成,usingComponents、componentGenerics、componentPlaceholder会按主包 / 分包输出位置重写;缺少组件 JSON 时仍会兜底输出{ "component": true }。 - Vite MP 增加 XML / WXML 组件属性诊断,基于
usingComponents和静态OakComponent({ properties })/Component({ properties })输出 warning,并写入node_modules/.cache/oak-cli-wechat-mp-props/*、.vscode/oak-wechat-mp-*。语言服务与 render/WXML runtime 由oak-assistant消费,当前 oak-cli 不再暴露install:mp-xml-plugin命令。 - tsc build 已把 WXML 分析提升为可选的正式类型检查:
--enable-xml-check会检查表达式、循环作用域、组件 properties、事件和 class;当前模板的build:es已默认启用,不能再把 XML 当作无类型字符串模板。 - 传统 TSX render 会从同目录 Oak component 的
entity、isList、properties、formData、methods推导props.data/props.methods。如果index.ts采用import OakComponent from '组件'; export default OakComponent;直接复用已有组件,CLI 会继续追踪本地源码合同,或从依赖包对应平台的 render 声明继承合同;本地直接调用OakComponent({...})时仍以本地定义为准。 - 复用组件的平台声明按 render 入口回退:
web.pc/web.mobile -> web,render.ios/render.android -> render.native,render.desktop -> web.pc -> web,render.windows/render.macos/render.linux -> render.desktop -> web.pc -> web。依赖包需要发布这些平台 render 的.d.ts;组件目录的index.d.ts只描述外部 React props,不能替代内部 render props 合同。 --emit-injection-types会把推导或继承的真实 props 写入 render 声明。对复用组件,产物使用稳定的公开模块引用,例如Parameters<typeof import("@scope/pkg/components/example/web").default>[0],不会泄漏虚拟文件名或本机绝对路径。业务包应在声明构建中启用该选项,供下游继续继承。--check-style-less增加 Less Module class 与 JSX/XML 使用检查,并按嵌套选择器、祖先 class、局部容器、alias 和 portal 可达性判断作用域。空规则或伪造类型不能替代真实样式声明。- tscBuilder 支持 compiler plugins,并隔离 watch program;插件配置、显式 schema builder config 和命名 locale workspace 可由当前编译链消费。
- 新增完整 Desktop 工作区支持,覆盖 Tauri 与 Electron、renderer/platform 分离、桌面路由发现、离线 locale、原生窗口外观与启动模板;Desktop 是 web renderer 运行形态,不应伪造新的 application type。窗口背景材质由系统能力和应用设置决定,当前模板不再启动时自动强制材质。
- create 流程增加数据库驱动选择,并与
oak-db的 MySQL、PostgreSQL、SQLite 驱动装载边界对齐。 - 新应用改为默认只创建 Web workspace;小程序、React Native、Tauri 和 Electron 通过
oak-cli add mp|rn|desktop按需添加,并生成 workspace-local TypeScript 配置与带--subDir的脚本。 - Native workspace 现在同时生成
build:native:<name>:android与build:native:<name>:iosproduction 脚本;Desktop Electron workspace 默认忽略dist-electron/。Web/Desktop/Native 模板 render 使用编译器注入 props,不再生成伪造实体的WebComponentProps或@ts-nocheck。 - 不安装任何公共业务包时,create 使用精简 no-business scaffold:只保留可运行的 frontend 展示页、匿名 CRUD 所需上下文和基础 feature;不会生成依赖登录态的 console namespace。带 general/pay 业务依赖的项目仍走完整模板。
- 小程序 Vite 增加可配置 Node polyfill:默认保留
process、global、Buffer和node:imports,同时排除容易放大主包或触发真机兼容问题的crypto、assert;项目可用完整include白名单显式恢复需要的 built-in。 - 小程序最终产物可通过
vite.mp.plugins.buildin.compressImage压缩 PNG、JPEG、WebP、AVIF;压缩器从消费项目加载sharp,未安装时 warning 并跳过。 - Web Vite 保留可选 PWA 接入,但当前 Vite 8 模板不会安装存在 peer 冲突的
vite-plugin-pwa。vite.web.plugins.buildin.pwa: false或{ enabled: false }可显式关闭并消除缺包提示;其它对象字段目前尚未转发给插件,不能当作已生效的 manifest/workbox 配置。 - MP watch、入口图刷新、stale cleanup、hash chunk 清理、资源监听、构建进度、图片压缩和 analyzer 选择修复较多,减少增量构建时的重复全图刷新和过期产物残留。
- create / scaffold 流程新增确认步骤、next steps 提示、统一的
oak.config.ts项目编译配置入口、推荐 CDN 配置、scripts/upgradeAuth.js和显式 Oak 依赖清单;旧项目迁移脚本补充 React Router、AntD v6、lodash 迁移扫描和oak.config.ts迁移断言。 - 依赖和模板同步升级 React 19、Vite 8、TypeScript 参数兼容、peerDependencies、
toolkit替换 lodash,以及根tsconfig编辑器聚合配置。
主要 diff 文件:
src/server/server-build.ts、src/server/start-routes.ts、src/createConfig.ts、src/shared/create-compiler-config.ts、src/shared/template.ts、tooling/config/oakPackage.shared.js、tooling/config/utils/injectGetRender.js、tooling/config/utils/frontendIconLibraries.js、tooling/config/utils/frontendIconCss.js、tooling/config/mp/workspace-config.js、tooling/plugins/OakViteWebCdnPlugin.js、tooling/plugins/ViteRouterBuilderPlugin.js、tooling/plugins/OakViteMpRouteMapVirtualPlugin.js、tooling/plugins/ViteWechatMpPlugin.js、tooling/plugins/wechat-mp-plugin/*、tooling/scripts/upgrade-legacy-app.js、scaffold/*、docs/*5.0.1(tag:5.0.1,区间:5.0.0..5.0.1)
- create 流程的 compiler config 改为分层生成,减少模板和运行配置互相污染。
- Vite 类型支持和 web
optimizeDeps默认预构建依赖更新。 - scaffold package dependency 与 smoke 配置做了修正。
主要 diff 文件:
src/shared/create-compiler-config.ts、Vite / webpack 配置模板、smoke 测试。升级注意
生产发布:发布包实体入口应优先保证
es/entities 完整。不要为了 make:domain 在生产依赖里发布 src。包元数据:共享 Oak 包应把业务模块、feature 初始化和编译 transform 迁移到
oak.business.* / oak.compiler.transform。项目侧 extraOakModules 更适合保留给非标准本地覆盖。小程序路由:历史代码中直接拼生成产物路径的地方,应优先改为 Oak navigator 或能被 route map 静态识别的调用。
switchTab 不能携带 query / state,升级时应检查旧导航代码。Web CDN:Vite Web 不再默认 external React 等依赖。需要 CDN 的项目必须在
oak.config.ts 显式配置内置 CDN 插件和对应 UMD / global 信息。图标库:页面、菜单和 namespace 配置里的图标继续保持字符串形态,例如
oak:setup_fill、trip:hotel、antd:ShopOutlined。不要把 ReactNode 写进 index.config.ts;React 图标库应通过 frontend.iconLibraries 声明,让编译器生成按需加载代码。使用 fontUrl 时必须同时提供 icons 映射,否则无法生成业务 glyph class。配置生成物:
index.config.ts 是页面、组件和 namespace 的结构化配置入口;allRouters.ts、allNamespaceConfigs.ts 和小程序虚拟 JSON 仍是生成物,不要手工修改。