Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

oak-cli 更新日志

当前 package5.0.6
最新 tag5.0.1
覆盖区间5.0.0..5.0.1 / 5.0.1..HEAD

5.0.6(区间:5.0.1..HEAD

tag 后持续更新server bundle、严格 render/XML/Less 编译、Desktop、页面配置、前端图标库和小程序 Vite 是主要变化面。
  • 后端新增 esbuild server runtime bundle 链路:模板提供 opt-in build:bundle,输出 dist/server.jsdist/package.jsondist/server-metafile.jsondist/target/*dist/configuration/*dist/oak-packages/*,Oak 包按 package.json.oak.package 元数据镜像,不再硬编码包名。项目自己的 pm2.*.json 按原名复制,不再生成固定 pm2.prod.config.json
  • server bundle 会保持根级 configuration/*.json 为运行时外部配置,生成的 server.js 会设置 NODE_ENVOAK_PLATFORM=serverOAK_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:新增 CreatePageConfigCreateComponentConfigCreateNamespaceConfig,路由生成会写入 route.accessmeta.titletitleI18nKeynamespacePath 和 namespace 菜单配置,生成物包括 allRouters.tsallNamespaceConfigs.ts
  • route.access 类型扩展为 publicloginrootdenyrefrelationoperationanyOfallOf 和数组简写;namespace 可声明 route.pathfirstnotFoundparams、菜单分组和运行时 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.iconLibrariesfrontend.targets.*.iconLibrariesfrontend.workspaces.*.iconLibraries,namespace config 也可以声明 iconLibraries。配置支持 fontreactimage 三类图标库;font 可提供 stylefontUrl + iconsreact 可通过 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.dedupeoptimizeDeps.include 的 package 收集。
  • Web / MP --analyze 统一到 Oak 自研 bundle analyzer,支持 bundle treemap、源码目录、NPM 依赖、小程序分包统计、反向依赖图、稳定颜色和 canvas 缩放交互。
  • 小程序配置从页面列表继续收敛到 package.config.ts:支持 namespace 页面范围、生成 PagesDefinetypings/oak-wechat-mp-pages.d.tspagessubPackagestabBarentryPagePathpreloadRule 获得类型约束。
  • 小程序 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 虚拟生成,usingComponentscomponentGenericscomponentPlaceholder 会按主包 / 分包输出位置重写;缺少组件 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 的 entityisListpropertiesformDatamethods 推导 props.data / props.methods。如果 index.ts 采用 import OakComponent from '组件'; export default OakComponent; 直接复用已有组件,CLI 会继续追踪本地源码合同,或从依赖包对应平台的 render 声明继承合同;本地直接调用 OakComponent({...}) 时仍以本地定义为准。
  • 复用组件的平台声明按 render 入口回退:web.pc/web.mobile -> webrender.ios/render.android -> render.nativerender.desktop -> web.pc -> webrender.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>:androidbuild:native:<name>:ios production 脚本;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:默认保留 processglobalBuffernode: imports,同时排除容易放大主包或触发真机兼容问题的 cryptoassert;项目可用完整 include 白名单显式恢复需要的 built-in。
  • 小程序最终产物可通过 vite.mp.plugins.buildin.compressImage 压缩 PNG、JPEG、WebP、AVIF;压缩器从消费项目加载 sharp,未安装时 warning 并跳过。
  • Web Vite 保留可选 PWA 接入,但当前 Vite 8 模板不会安装存在 peer 冲突的 vite-plugin-pwavite.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.tssrc/server/start-routes.tssrc/createConfig.tssrc/shared/create-compiler-config.tssrc/shared/template.tstooling/config/oakPackage.shared.jstooling/config/utils/injectGetRender.jstooling/config/utils/frontendIconLibraries.jstooling/config/utils/frontendIconCss.jstooling/config/mp/workspace-config.jstooling/plugins/OakViteWebCdnPlugin.jstooling/plugins/ViteRouterBuilderPlugin.jstooling/plugins/OakViteMpRouteMapVirtualPlugin.jstooling/plugins/ViteWechatMpPlugin.jstooling/plugins/wechat-mp-plugin/*tooling/scripts/upgrade-legacy-app.jsscaffold/*docs/*

5.0.1(tag:5.0.1,区间:5.0.0..5.0.1

已发布create / compiler config 和 Vite 依赖预构建调整。
  • 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_filltrip:hotelantd:ShopOutlined。不要把 ReactNode 写进 index.config.ts;React 图标库应通过 frontend.iconLibraries 声明,让编译器生成按需加载代码。使用 fontUrl 时必须同时提供 icons 映射,否则无法生成业务 glyph class。
配置生成物:index.config.ts 是页面、组件和 namespace 的结构化配置入口;allRouters.tsallNamespaceConfigs.ts 和小程序虚拟 JSON 仍是生成物,不要手工修改。