weapp-vite 7.3.0 → 7.5.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/README.md +154 -6
- package/bin/bootstrap.js +14 -1
- package/dist/adapters-CcHrsYaj.mjs +1 -0
- package/dist/analyze-ZJUvEdaY.mjs +248 -0
- package/dist/auto-import-components/resolvers.mjs +1 -2
- package/dist/auto-import-presets/wevu-router.mjs +1 -2
- package/dist/auto-import-presets/wevu.mjs +1 -2
- package/dist/auto-routes.mjs +2 -1
- package/dist/budget-BD7VqLCl.d.mts +178 -0
- package/dist/chunkStrategy-DRA5WpB-.mjs +1436 -0
- package/dist/cli-acceptance.d.mts +1 -0
- package/dist/cli-acceptance.mjs +21 -0
- package/dist/cli.mjs +1918 -2089
- package/dist/compatibility.mjs +1 -2
- package/dist/{config-1J4rToMR.d.mts → config-V0L-IAJf.d.mts} +419 -39
- package/dist/config.d.mts +2 -2
- package/dist/config.mjs +1 -1
- package/dist/constants-DEZdcsMn.mjs +85 -0
- package/dist/{createContext-cqr9Y4EV.mjs → createCompilerContextInstance-DJH_P_nZ.mjs} +17602 -15886
- package/dist/createContext-BqYzHhY9.mjs +12 -0
- package/dist/dashboard/analyze.d.mts +48 -0
- package/dist/dashboard/analyze.mjs +1 -0
- package/dist/dashboard/vite.d.mts +9 -0
- package/dist/dashboard/vite.mjs +44 -0
- package/dist/dashboard-DvqF3Key.mjs +1842 -0
- package/dist/dashboard.d.mts +3 -0
- package/dist/dashboard.mjs +1 -0
- package/dist/dashboardViteBridge-Dy3nAD4m.mjs +299 -0
- package/dist/dev-fR5GiJRO.mjs +63 -0
- package/dist/devProvider-BGBkw28J.mjs +1050 -0
- package/dist/docs/README.md +154 -6
- package/dist/docs/ai-workflows.md +4 -0
- package/dist/docs/doctor.md +38 -0
- package/dist/docs/getting-started.md +52 -1
- package/dist/docs/index.md +6 -2
- package/dist/docs/mcp.md +94 -1
- package/dist/docs/testing.md +29 -2
- package/dist/docs/troubleshooting.md +8 -0
- package/dist/docs/uni-app-component-libraries.md +8 -7
- package/dist/docs/upload.md +226 -0
- package/dist/docs/vite-plugin.md +171 -0
- package/dist/docs/vue-sfc.md +19 -0
- package/dist/docs/weapp-config.md +374 -2
- package/dist/docs/wevu-authoring.md +10 -0
- package/dist/doctor-worker.d.mts +1 -0
- package/dist/doctor-worker.mjs +59 -0
- package/dist/doctor.d.mts +144 -0
- package/dist/doctor.mjs +848 -0
- package/dist/eslint.mjs +1 -2
- package/dist/file-DRb4eWqw.mjs +1 -0
- package/dist/{file-CKB0Tn8Z.mjs → file-sC3jD7Fh.mjs} +16 -93
- package/dist/files-BqxFIPRp.mjs +45 -0
- package/dist/getInstance-DiGSzBNI.mjs +28 -0
- package/dist/getInstance-SiE6WZRh.mjs +1 -0
- package/dist/index-C9HjUX5c.d.mts +741 -0
- package/dist/index.d.mts +10 -8
- package/dist/index.mjs +3 -2
- package/dist/json.d.mts +1 -1
- package/dist/json.mjs +1 -2
- package/dist/lifecycle-BROTlwSL.mjs +320 -0
- package/dist/loadConfig-C3BQhz7F.mjs +59 -0
- package/dist/loadConfig-VGtBF4qm.mjs +1 -0
- package/dist/logger-DGn5iEVN.mjs +1 -0
- package/dist/{mcp-BG6TliEg.mjs → mcp-Cj8Maqo6.mjs} +16 -7
- package/dist/mcp-D3Yh24Cj.mjs +529 -0
- package/dist/mcp.d.mts +6 -3
- package/dist/mcp.mjs +1 -2
- package/dist/package-7swhyLmf.mjs +91 -0
- package/dist/path-doV773b7.mjs +103 -0
- package/dist/platform-CnkySBKz.mjs +175 -0
- package/dist/processCleanup-B6KA30Zc.mjs +77 -0
- package/dist/protocol-vg8HGJ4n.mjs +138 -0
- package/dist/{resolvers-icNxkpcy.mjs → resolvers-Dod-euqX.mjs} +4 -1
- package/dist/resolvers.mjs +1 -2
- package/dist/runtime.mjs +1 -2
- package/dist/session-PskhD-nZ.mjs +390 -0
- package/dist/test.d.mts +1 -0
- package/dist/test.mjs +201 -44
- package/dist/types.d.mts +2 -2
- package/dist/upload-D4msblBf.mjs +562 -0
- package/dist/upload-worker.d.mts +1 -0
- package/dist/upload-worker.mjs +161 -0
- package/dist/utils-CJSCgEj6.mjs +1094 -0
- package/dist/vite.d.mts +9 -0
- package/dist/vite.mjs +270 -0
- package/dist/volar.d.mts +2 -2
- package/dist/web-apis.mjs +1 -2
- package/package.json +85 -37
- package/dist/file-CvgkbGIx.mjs +0 -2
- package/dist/getInstance-CZ1s63zd.mjs +0 -2
- package/dist/logger-mt4mSTqV.mjs +0 -2
package/dist/docs/README.md
CHANGED
|
@@ -14,6 +14,20 @@
|
|
|
14
14
|
|
|
15
15
|
<p> </p>
|
|
16
16
|
|
|
17
|
+
## Node.js 支持范围
|
|
18
|
+
|
|
19
|
+
框架及编译依赖链要求 `^22.18.0 || ^24.11.0 || >=26.0.0`:Node 22 至少 22.18.0、Node 24 至少 24.11.0,或 Node 26 及以上版本;不支持 Node 20、23、25。这是 Babel 8 与必需构建依赖支持范围的交集,不能通过关闭 engines 校验恢复旧版本支持。
|
|
20
|
+
|
|
21
|
+
升级已有项目时先升级 Node.js,再重新安装依赖。CLI 会在加载编译依赖前检查实际 Node 版本;`prepare` 也会明确拒绝不支持的环境。直接通过 Vite 或程序 API 消费时同样需要遵守包的 `engines.node`。
|
|
22
|
+
|
|
23
|
+
`create-weapp-vite` 自身依赖要求更高:Node 22 至少 22.22.2、Node 24 至少 24.15.0,或 Node 26 及以上版本。新建项目按脚手架要求选择 Node,不要将框架最低版本误认为脚手架最低版本。
|
|
24
|
+
|
|
25
|
+
发布候选在构建环境中打包,再在独立临时消费者中以严格 engines/peer 校验安装;CI 覆盖 Linux、Windows、macOS 的 Node 22.18.0、24.11.0、26.0.0 及 22/24 当前补丁版本,验证原生和 SFC 构建、prepare 与公开类型。
|
|
26
|
+
|
|
27
|
+
## 普通 Vite 与 Vite+
|
|
28
|
+
|
|
29
|
+
独立项目继续使用 `wv dev/build`,不需要注册插件或安装 Vite+。采用普通 Vite / Vite+ 时,在顶层 `weapp` 配置旁注册 `weapp-vite/vite` 的 `weapp()`,使用原生 `vite dev/build` / `vp dev/build`。当前插件开放微信 TS/Vue/React 生产构建、原生 `build --watch` 与实验性 classic/stateful 开发;通过 `weapp.hmr.runtime` 选择模式,已支持普通分包、独立分包与 worker,其他高级目标仍在分阶段对齐。Vite+ 需要配套 core alias 与依赖覆盖,详见[标准插件指南](https://vite.weapp.dev/guide/vite-plugin.html)。
|
|
30
|
+
|
|
17
31
|
## 使用文档地址: [vite.weapp.dev](https://vite.weapp.dev)
|
|
18
32
|
|
|
19
33
|
## Features
|
|
@@ -31,7 +45,7 @@
|
|
|
31
45
|
- 🌐 **实验性 Web Runtime**:同一份原生 WXML/WXSS/TS 或 wevu Vue SFC 源码可通过 `-p web` 启动和构建浏览器版本
|
|
32
46
|
- 🎨 **内置 Tailwind CSS**:通过 `weapp.tailwindcss` 配置 `weapp-tailwindcss` 的 core 与 generator 集成;Tailwind CSS v4 项目引入 `tailwindcss` 后可自动启用
|
|
33
47
|
- 🧩 **实验性 uni-app 组件库兼容**:通过显式依赖白名单与 `WotUiResolver()` 在微信小程序和 Web 中使用 Wot UI Vue SFC
|
|
34
|
-
- 🧰 **IDE
|
|
48
|
+
- 🧰 **IDE 命令增强**:通过 `wv ide <command>` 调用 `weapp-ide-cli`;保留旧顶层上传参数并提示未来弃用,SDK 与 IDE 边界见下文
|
|
35
49
|
- 🧪 **真实产物单测**:`weapp-vite/test` 提供不启动 CLI 的程序化测试构建入口,可配合 `@mpcore/test` 测试页面和组件
|
|
36
50
|
- 🌍 **内置 i18n**:构建期编译 locale JSON,通过 WXS 翻译模板,并在逻辑层安全切换已构建语言
|
|
37
51
|
|
|
@@ -64,6 +78,76 @@ wv build -p web
|
|
|
64
78
|
|
|
65
79
|
`web` 是浏览器 runtime 的规范平台名,`h5` 仅作为向后兼容别名保留;未选择 Web 平台时不改变现有小程序构建。完整配置和兼容边界见 [Web 运行时配置](https://vite.weapp.dev/config/web) 与 [`@weapp-vite/web`](https://vite.weapp.dev/packages/web)。
|
|
66
80
|
|
|
81
|
+
### 可选 Hub 工作台
|
|
82
|
+
|
|
83
|
+
`wv dev --ui` / `wv build --ui` 保持独立 Dashboard。安装可选面板包 `@weapp-vite/dashboard` 后,可显式启用 DevFrame 1.2 的官方 Hub,无需安装 Vite DevTools:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
wv dev --ui-host hub
|
|
87
|
+
wv build --ui-host hub
|
|
88
|
+
wv analyze --ui-host hub
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
`--ui-host` 只接受 `standalone` 和 `hub`,并隐式启用 UI;不传 UI 参数时,`dev` / `build` 不新增服务。Hub 入口为 `/__devframes/`,Dashboard 面板仍为 `/__weapp-vite/`,共用 loopback 服务、OTP 认证、报告控制器和原生连接。Hub 提供停靠面板与内建设置,不安装终端或其他默认工具;语言设置不自动翻译自定义 Dashboard。
|
|
92
|
+
|
|
93
|
+
Dashboard dock 与 Hub 品牌使用与官网相同图案的包内 SVG 字符串,以 data URL 提供。源码入口和发布产物均无需 SVG loader、官网目录或外部图标服务。
|
|
94
|
+
|
|
95
|
+
Hub 的 `/__devframes/__mcp` 聚合端点保持关闭,但与独立模式一样发布 Dashboard scoped MCP 实例,地址为 `/__weapp-vite/__mcp`,不继承其他插件的工具或 Resources。`analyze --json`、`--markdown`、`--report` 等输出选项优先级保持不变;Hub 不是离线报告导出。完整参数见 [CLI 指南](https://vite.weapp.dev/guide/cli#可选-hub-工作台)。
|
|
96
|
+
|
|
97
|
+
### Dashboard 嵌入 Vite DevTools
|
|
98
|
+
|
|
99
|
+
`weapp-vite/dashboard` 是 Node 端共享核心;CLI 独立工作台与 Vite DevTools 复用同一个 `DevframeDefinition` 和 `@weapp-vite/dashboard` 面板。可选适配器位于 `weapp-vite/dashboard/vite`,使用官方 `createPluginFromDevframe`,不会由普通包入口或 CLI 自动加载。
|
|
100
|
+
|
|
101
|
+
接入方安装 `@weapp-vite/dashboard`、`@vitejs/devtools` 和 `@vitejs/devtools-kit`。当前接入按 Vite `8.3.0`、DevTools / Kit `0.7.6`、Devframe `1.1.0` 验证;Kit 是可选 peer,宿主依赖不进入小程序产物。
|
|
102
|
+
|
|
103
|
+
```ts
|
|
104
|
+
import type { DevToolsConfig } from '@vitejs/devtools/config'
|
|
105
|
+
import type { DashboardAnalyzeSnapshot, DashboardContentRoots } from 'weapp-vite/dashboard'
|
|
106
|
+
import { DevTools } from '@vitejs/devtools'
|
|
107
|
+
import { createAnalyzeDashboardDevframe, resolveDashboardClientAssets } from 'weapp-vite/dashboard'
|
|
108
|
+
import { createAnalyzeDashboardPlugin } from 'weapp-vite/dashboard/vite'
|
|
109
|
+
|
|
110
|
+
export function createDashboardHost(snapshot: DashboardAnalyzeSnapshot, roots: DashboardContentRoots) {
|
|
111
|
+
const dashboard = createAnalyzeDashboardDevframe({
|
|
112
|
+
snapshot,
|
|
113
|
+
roots,
|
|
114
|
+
clientAssets: resolveDashboardClientAssets(roots.projectRoot),
|
|
115
|
+
})
|
|
116
|
+
const hostOptions: DevToolsConfig = {
|
|
117
|
+
builtinDevTools: false,
|
|
118
|
+
clientAuth: true,
|
|
119
|
+
allowedOrigins: [],
|
|
120
|
+
mcp: false,
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
dashboard,
|
|
124
|
+
plugins: [
|
|
125
|
+
DevTools(hostOptions),
|
|
126
|
+
createAnalyzeDashboardPlugin(dashboard, { base: '/tools/weapp/' }),
|
|
127
|
+
],
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
将返回的 `plugins` 交给 Vite 配置。调用方先完成分析及历史元数据持久化,用 `createDashboardArtifactSnapshot().capture` 收集该次分析的产物,再提交 `{ current, previous, artifacts }`。后续调用 `dashboard.update(result, artifacts, previousResult?)`;仅运行事件变化时调用 `dashboard.emitRuntimeEvents(events)`。提交后不要再修改报告或产物 Map。
|
|
133
|
+
|
|
134
|
+
每个控制器只同时挂载到一个逻辑宿主。适配器记录成功安装的 Vite 配置身份,并仅在该配置拥有的环境关闭时释放核心。成功重启将所有权移交给新配置,旧实例和未安装的失败候选的清理都不会误释放当前控制器;替换前的资源校验失败时,旧宿主仍可查询和更新。首次 setup 失败或 SDK 安装开始后的失败会释放核心,不承诺回滚部分安装。自行使用 `dashboard.definition` 对接其他 Devframe 宿主时,调用方必须负责最终关闭和启动失败时的 `dashboard.dispose()`。核心不启动服务器,也不拥有外部宿主的认证、Origin 或 MCP 策略;共享宿主不是只读沙箱。
|
|
135
|
+
|
|
136
|
+
DevTools `0.7.6` 自身存在程序化重启边界:重复使用同一个 `DevTools()` 返回值时,旧实例关闭可能同时关闭新实例的 WebSocket;不安装 Dashboard 也能复现。应在每次重载的 Vite 配置中重新调用 `DevTools()`,不要把该 SDK 插件实例长期缓存在复用的 inline 配置里。上述重启验证使用重新创建的 SDK 宿主和保留的 Dashboard 控制器,不代表修复了上游传输问题。
|
|
137
|
+
|
|
138
|
+
面板默认位于 `/__weapp-vite/`,自定义目录与应用 `base` 独立。前端复用宿主连接或从页面相对位置发现元数据,复制视图链接保留目录和查询参数但排除认证 fragment。适配器只在开发模式挂载,生产构建不要求可选面板资源,也不导出报告。以上入口仅用于 Node 开发 / 构建宿主,不应导入小程序 AppService。
|
|
139
|
+
|
|
140
|
+
仓库内可通过 `apps/dashboard-ui-lab` 的 `dev:inspector` 与 `dev:inspector:host` 验证两种宿主,详见其 [实验说明](../../apps/dashboard-ui-lab/README.md)。
|
|
141
|
+
|
|
142
|
+
### Dashboard MCP
|
|
143
|
+
|
|
144
|
+
CLI 的 standalone 与 Hub 模式均向 AI 提供摘要/预算、包与产物/模块检索、重复分析、构建比较、最近事件与受限文件片段,并提供调查列表、详情和领取/提案/开始/回报四个元数据动作。页面与工具共享报告、产物及 `weapp-vite/dashboard/analyze` 纯计算,缺失基线或测量不会假造增减。实际监听后可通过 `devframe connect` 发现 scoped 实例;MCP 校验 loopback 对端与 Origin,浏览器使用 OTP。本机模式不区分本机用户,请勿通过代理、隧道或端口转发对外发布。
|
|
145
|
+
|
|
146
|
+
「对象检查」以真实包 → 产物 → 模块关系浏览完整报告,选择与显式筛选分离,证据/内容/变化/调查共用一个上下文区。浏览器提交绑定报告的调查,外部 Agent 回传提案后需用户明确授权;执行仍在外部,回执不能代替更新报告上的人工复验。创建、取消、授权和复验不暴露为 Agent 工具,也不提供通用 shared-state、任意文件写入或命令执行。
|
|
147
|
+
|
|
148
|
+
旧 revision 请求与旧提案授权会被拒绝。嵌入 Vite DevTools 时仍由宿主决定是否开放 MCP;现有 `wv mcp`、REST 与微信 IDE 自动化入口保持不变。客户端配置、任务版本和领取令牌用法见 [随包 MCP 指南](docs/mcp.md#dashboard-证据查询与对象调查devframe)。
|
|
149
|
+
|
|
150
|
+
|
|
67
151
|
### Vue 项目
|
|
68
152
|
|
|
69
153
|
```typescript
|
|
@@ -73,10 +157,10 @@ import { defineConfig } from 'weapp-vite/config'
|
|
|
73
157
|
export default defineConfig({
|
|
74
158
|
weapp: {
|
|
75
159
|
srcRoot: 'src',
|
|
160
|
+
wxml: { remove: { comment: true } },
|
|
76
161
|
vue: {
|
|
77
162
|
enable: true,
|
|
78
163
|
template: {
|
|
79
|
-
removeComments: true,
|
|
80
164
|
htmlTagToWxml: true,
|
|
81
165
|
htmlTagToWxmlTagClass: true,
|
|
82
166
|
},
|
|
@@ -321,20 +405,61 @@ weapp-vite dev --open
|
|
|
321
405
|
# o -> 重新打开当前 DevTools 项目
|
|
322
406
|
```
|
|
323
407
|
|
|
408
|
+
## 六端构建并上传
|
|
409
|
+
|
|
410
|
+
显式执行 `wv build --upload`,在本次构建成功并校验产物后上传,不重复构建。支持微信 `weapp`、支付宝 `alipay`、抖音 `tt`、小红书 `xhs`、京东 `jd`、百度 `swan`;只上传开发版本,不自动提审或正式上线。
|
|
411
|
+
|
|
412
|
+
```sh
|
|
413
|
+
wv build --upload --dry-run
|
|
414
|
+
wv build --upload -p weapp
|
|
415
|
+
|
|
416
|
+
# 独立 upload 命令仍支持多个小程序目标;all 在此表示六端
|
|
417
|
+
wv upload --platform jd,swan
|
|
418
|
+
wv upload --platform all --dry-run
|
|
419
|
+
wv upload --platform xhs,tt --json --timeout 180
|
|
420
|
+
|
|
421
|
+
# 内置本地自动版本演练,不修改版本或锁文件
|
|
422
|
+
wv upload -p xhs,tt --mode test --bump patch --git-desc --dry-run
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
通常无需配置 `weapp.upload`:默认读取业务 `package.json.version`,说明自动生成 `项目名@版本`;默认不升版、不读取 Git、不运行 npm。需要覆盖时用 `weapp.upload` 或 CLI `--uv` / `--desc`;本地自动版本显式使用 CLI `--bump patch|minor|major` / `--git-desc`,分别与 `--uv` / `--desc` 冲突,不写入 Vite 配置。`.env.test` / `.env.production`、不同 AppID、本地自动版本与 CI 方案见[上传环境与自动版本](https://vite.weapp.dev/guide/upload/environments.html)。普通 `build`、`dev/HMR` 不上传,`preview` 不使用上传默认参数;配置文件仍正常求值。`build` 的上传专属参数必须与 `--upload` 一起使用,不支持 `--watch` 或 Web-only。
|
|
426
|
+
|
|
427
|
+
自动元数据在首次配置求值、编译前准备一次,批量共用;升版仅处理命令根目录的应用清单,不向父目录查找。真实升版需要本机 npm,只有 Git 说明要求已有提交的 Git 仓库;不执行生命周期钩子、不 commit/tag/push。dry-run 不运行 npm、不修改版本或锁文件,直接导入 `package.json` 的构建代码仍读取原始版本。实际升版后的构建或上传失败不回滚,重试去掉 `--bump` 并复用原版本,必要时用 `--uv` / `--desc` 固定上一批元数据。
|
|
428
|
+
|
|
429
|
+
`build -p all --upload` 保持“小程序 + Web”语义,等两个后端都构建成功后只上传小程序;独立 `wv upload -p all` 才是六端逐一构建上传,首次失败停止。`--dry-run` 只构建并校验产物,不校验凭据、不调用 SDK。
|
|
430
|
+
|
|
431
|
+
独立 `upload --json` 将单个结构化报告写入 stdout,构建日志与官方进度进入 stderr;失败保留前序成功、当前错误和后续 `not-run` 条目,并以非零状态退出。`--timeout <秒>` 只限制各平台 SDK worker,不包含构建。SDK 开始后超时或中断标记远端结果未确认;终止本地进程不能取消远端任务,不自动重试。六端可选结果与进度差异见[结果、进度与本地超时](https://vite.weapp.dev/guide/upload.html#report)。这两个选项不适用于 `build --upload`、`preview` 或 IDE 上传。
|
|
432
|
+
|
|
433
|
+
多个平台可用一份 `weapp.multiPlatform.projectConfigs` 映射集中配置 AppID,公共字段用对象展开复用,不必手工维护六份原生 JSON。构建器在代码输出目录内生成对应项目配置;原生文件方式仍可使用。完整配置见[一份配置与批量上传](https://vite.weapp.dev/guide/upload.html#batch)。
|
|
434
|
+
|
|
435
|
+
官方工具按目标安装,凭据只使用环境变量,不在 `weapp.upload` 中配置。完整的项目配置、AppID、凭据获取与环境文件、上传、预览、批量操作、CI 与排障见[小程序上传与预览指南](https://vite.weapp.dev/guide/upload.html):[小红书](https://vite.weapp.dev/guide/upload/xhs.html)、[抖音](https://vite.weapp.dev/guide/upload/tt.html)、[微信](https://vite.weapp.dev/guide/upload/weapp.html)、[支付宝与淘宝边界](https://vite.weapp.dev/guide/upload/alipay.html)、[京东](https://vite.weapp.dev/guide/upload/jd.html)、[百度](https://vite.weapp.dev/guide/upload/swan.html)。本地速查见 `dist/docs/upload.md`;淘宝暂不支持,不要用 `-p alipay` 替代。
|
|
436
|
+
|
|
437
|
+
## 六端构建并预览
|
|
438
|
+
|
|
439
|
+
```sh
|
|
440
|
+
wv preview -p tt --mode test
|
|
441
|
+
wv preview -p xhs,jd,swan --mode production
|
|
442
|
+
wv preview -p all --dry-run
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
`preview` 复用上述六端构建与凭据,调用官方预览接口,不上传开发版本、不提审、不正式发布。微信返回 `.weapp-vite/preview/` 下本次生成的二维码图片;支付宝、京东返回二维码图片 URL;抖音、小红书、百度返回官方预览链接。默认 mode 为 `production`,不要求上传版本,也不接受 `--uv`、`--bump` 或 `--git-desc`。百度预览也需要 `SWAN_MIN_VERSION`。
|
|
446
|
+
|
|
447
|
+
`--dry-run` 只构建和校验产物,不调用 SDK、不生成预览结果。真实扫码权限与有效期依平台规则,详情见 [CLI 预览文档](https://vite.weapp.dev/guide/cli.html)。
|
|
448
|
+
|
|
324
449
|
## CLI 中调用 weapp-ide-cli
|
|
325
450
|
|
|
326
|
-
`weapp-vite` 内置了对 `weapp-ide-cli`
|
|
451
|
+
`weapp-vite` 内置了对 `weapp-ide-cli` 的透传能力:原生命令通常优先,其他命令仅在 IDE catalog 命中时透传。`wv upload` 默认走六端 SDK,但保留带明确旧参数的顶层微信 IDE 上传;`wv preview` 仍是 SDK 预览,不属于旧语法兼容范围。稳定的显式 `ide upload`、`ide preview` 不弃用:
|
|
327
452
|
|
|
328
453
|
```sh
|
|
329
|
-
weapp-vite preview --project ./dist/build/mp-weixin
|
|
330
|
-
weapp-vite upload --project ./dist/build/mp-weixin -v 1.0.0 -d "release"
|
|
454
|
+
weapp-vite ide preview --project ./dist/build/mp-weixin
|
|
455
|
+
weapp-vite ide upload --project ./dist/build/mp-weixin -v 1.0.0 -d "release"
|
|
331
456
|
weapp-vite cache --clean compile
|
|
332
457
|
weapp-vite cache --clean all
|
|
333
458
|
weapp-vite config lang zh
|
|
334
459
|
weapp-vite config set autoTrustProject true
|
|
335
460
|
weapp-vite navigate pages/index/index --project ./dist/build/mp-weixin
|
|
336
461
|
# 等价写法
|
|
337
|
-
wv preview --project ./dist/build/mp-weixin
|
|
462
|
+
wv ide preview --project ./dist/build/mp-weixin
|
|
338
463
|
wv cache --clean all
|
|
339
464
|
```
|
|
340
465
|
|
|
@@ -349,6 +474,21 @@ weapp-vite ide logs --open
|
|
|
349
474
|
wv ide preview --project ./dist/build/mp-weixin
|
|
350
475
|
```
|
|
351
476
|
|
|
477
|
+
原有顶层上传的长、短参数仍可原样执行,不额外触发 weapp-vite 构建:
|
|
478
|
+
|
|
479
|
+
```sh
|
|
480
|
+
wv upload --project ./dist --version 1.2.3 --desc "release"
|
|
481
|
+
wv upload -p ./dist -v 1.2.3 -d "release"
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
新 SDK 上传使用 `wv upload -p weapp` 即可,无需 `--project`,框架按项目配置与本轮实际输出自动定位。上面 `./dist` 只是旧 IDE 工程目录示例,应包含 `project.config.json`;旧入口省略定位参数时保持透传,不会默认补 `dist`。
|
|
485
|
+
|
|
486
|
+
每次旧顶层调用只警告一次未来移除,不要求立即改写脚本;若只想保留 IDE 行为,改为 `wv ide upload -p ./dist -v 1.2.3 -d "release"`,该显式入口不警告。若迁移到 SDK,先在**源码项目根**安装 `miniprogram-ci`、配置 AppID、代码上传私钥与 IP 白名单,再执行 `wv build --upload -p weapp --uv 1.2.3 --desc "release"`。SDK 会重新构建、使用新凭据,不复用 IDE 登录;不要把旧 `--project` 的产物目录直接作为 `[root]`。
|
|
487
|
+
|
|
488
|
+
`-p` 有 `--version/-v`、`--project`、`--appid`、`--ext-appid` 或 `--info-output/-i` 等旧标记时才表示 IDE 项目目录,否则表示平台,不猜测路径。旧标记与 SDK 的 `--platform`、`--uv`、`--bump`、`--git-desc`、`--dry-run`、`--json`、`--timeout`(含其 `--no-*` 形式)混用,在 IDE、编译或版本修改前报错;SDK 专属选项不适用于 IDE。`--desc` 共用,`-d` 只在旧调用中是说明,原生命令中仍是 debug。
|
|
489
|
+
|
|
490
|
+
`wv upload --help` 查看 SDK 帮助;`wv help upload` 保留旧 IDE 帮助并提示未来弃用;`wv ide help upload` 不弃用、不警告。等号写法、选项值与 `--` 边界等完整规则见[旧上传兼容与迁移](https://vite.weapp.dev/guide/cli.html#legacy-upload)。
|
|
491
|
+
|
|
352
492
|
## CLI 启动 MCP
|
|
353
493
|
|
|
354
494
|
`weapp-vite` 已集成 `@weapp-vite/mcp`:
|
|
@@ -442,3 +582,11 @@ const artifact = await buildTestArtifact({ cwd: process.cwd() })
|
|
|
442
582
|
[MIT](./LICENSE)
|
|
443
583
|
|
|
444
584
|
<!-- "//------":""esbuild": "^0.21.3",", -->
|
|
585
|
+
|
|
586
|
+
## 实验性标准 Vite 插件
|
|
587
|
+
|
|
588
|
+
`weapp-vite/vite` 导出 `weapp()`,通过 `plugins: [weapp()]` 和顶层 `weapp` 配置接入原生 `vite build` / `vp build`。当前开放微信 TS/Vue/React 生产构建、原生 build watch 与实验性 classic/stateful 开发;已支持普通分包、独立分包与 worker,其他高级目标继续分阶段对齐。配置、Vite+ alias 与未开放能力见 [标准插件指南](https://vite.weapp.dev/guide/vite-plugin)。离线说明随包发布在 `dist/docs/vite-plugin.md`。
|
|
589
|
+
|
|
590
|
+
## AI 改动验收
|
|
591
|
+
|
|
592
|
+
通过 `wv accept --inspect --json` 检查环境;审阅配置后运行 `wv accept --trust --json`。现有 MCP 同时提供验收启动、状态、取消和报告工具,无需模型 Key。[接入指南](https://vite.weapp.dev/guide/acceptance)。独立 `weapp-agent` CLI 同仓维护并保留原命令。
|
|
@@ -126,3 +126,7 @@ wv mcp doctor codex
|
|
|
126
126
|
- wevu 页面、组件、store 写法:[`wevu-authoring.md`](./wevu-authoring.md)
|
|
127
127
|
- Vue SFC 宏与模板约束:[`vue-sfc.md`](./vue-sfc.md)
|
|
128
128
|
- 常见告警与排障:[`troubleshooting.md`](./troubleshooting.md)
|
|
129
|
+
|
|
130
|
+
## 确定性验收
|
|
131
|
+
|
|
132
|
+
使用 `wv accept --init` 创建配置、`wv accept --inspect --json` 检查环境。审阅后 `wv accept --trust --json`,通过 `wv accept --report <jobId> --json` 读取报告。现有 MCP 的 weapp_project_inspect 和 weapp_acceptance_start/status/cancel/report 支持相同流程;使用 weapp-acceptance Skill。缺失必需检查、过期证据和单张截图都不能代表完整验收通过。
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Doctor
|
|
2
|
+
|
|
3
|
+
`wv doctor` / `runDoctor`(来自 `weapp-vite/doctor`)共享只读事实检查引擎,分别记录 project/source/artifact/runtime 覆盖。默认读取项目 JSON 和 `src`,不执行配置、不启动 IDE、不上传数据或修改代码。其他源码目录须显式传入 `--source`;构建模式会使用实际编译源码目录。
|
|
4
|
+
|
|
5
|
+
```sh
|
|
6
|
+
wv doctor --format json
|
|
7
|
+
wv doctor --build --targets weapp,alipay,swan,tt,xhs
|
|
8
|
+
wv doctor --artifact dist --platform weapp --format sarif
|
|
9
|
+
wv doctor --runtime --platform weapp
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
`--build` 明确允许执行配置/插件,在独立子进程中通过正常编译器生成 `.weapp-vite/doctor` 下的最终产物,再读取快照。构建日志走 stderr,不污染 JSON/SARIF。报告包含实际相对目录、文件摘要和预算。与 `--artifact` 互斥,后者标记新鲜度未验证、缺失编译预算时 incomplete。
|
|
13
|
+
|
|
14
|
+
`--runtime` 只连接已打开的微信 DevTools 项目并读取 Tool.getInfo 与当前页面,不启动 IDE、不切换路由;已有非默认 automator 会话可使用 `--runtime-port <port>`。这不代表应用功能已经通过 E2E。其他宿主无探针、连接失败或未打开项目均为 incomplete。
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
宿主分层证据会保留 CLI 可执行条件、指定服务监听、登录查询与登录状态、项目连接、工具信息、当前页面以及本次连接释放的独立结果。`passed`、`failed`、`unknown`、`not-run` 分开记录;部分失败仍保留成功阶段、实际 IDE/SDK 版本和脱敏证据,退出码为 2。TCP 可达只证明有监听,不证明它属于所选 IDE;Tool.getInfo/页面快照也不证明完整应用功能已通过。
|
|
18
|
+
|
|
19
|
+
- `--runtime-cli <path>`:只读检查显式选择的 CLI,不执行、不回退其他安装。
|
|
20
|
+
- `--runtime-service-port <port>`:连接指定回环 TCP 端口检查监听,仅释放本次 socket。
|
|
21
|
+
- `--runtime-login`:单独允许执行原生 islogin,需要同时传入 `--runtime-cli`;原生 CLI 可能启动 IDE。没有此开关不会查询或推断登录状态。
|
|
22
|
+
|
|
23
|
+
上述选项都需要 `--runtime`。JSON/SARIF 中的 `runtime.<target>.bundle` 包含框架/Node 版本、可取得的 IDE/基础库版本、配置选择摘要、最后成功阶段、有限的固定分类事件及通用复现命令。未知版本省略,终端显示 unknown;不保存原始 Tool.getInfo、CLI 输出、凭据、绝对路径或页面查询参数,不自动上传。`not-run` 不代表检查通过;旧的自定义 runtime adapter 仍可使用原证据结构。
|
|
24
|
+
|
|
25
|
+
连接和页面/工具 RPC 有界等待,迟到连接只断开自身 websocket,迟到 RPC 不会改写已返回的报告。完整操作层的总 deadline、分类重试和跨进程取消由相应操作层负责;此探针不替代 #1141 的完整工作。
|
|
26
|
+
|
|
27
|
+
退出码:0 为请求范围完整且无错误;1 为发现门禁错误;2 为未完成或执行失败(优先于 1)。未请求的层标为 not-requested。
|
|
28
|
+
|
|
29
|
+
复用平台注册表、ESLint 兼容规则和包体预算。非微信平台不使用微信 API 基线;尚无完整 API 目录时相应层 incomplete。HarmonyOS 等设备系统不作为编译目标别名。源码风险与产物诊断分离;动态引用、外部插件、自定义 npm 输出等事实不足的范围不判定通过。
|
|
30
|
+
|
|
31
|
+
产物检查包含页面/组件文件与引用、静态脚本/模板/样式依赖、独立分包边界、worker 目录和预算。诊断包含稳定 ruleId、location、evidence、responsibility、fingerprint、suggestion。无法确定责任时保留 unknown;confirmed 仅指当前静态契约的确定违反,不代表已确认框架 bug。报告只保留产物字节数与摘要,不附带完整源码。工具不会自动发布报告或创建 issue。
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
import { formatDoctorReport, runDoctor } from 'weapp-vite/doctor'
|
|
35
|
+
|
|
36
|
+
const report = await runDoctor({ cwd: '.', build: true, targets: ['weapp'] })
|
|
37
|
+
const json = formatDoctorReport(report, 'json')
|
|
38
|
+
```
|
|
@@ -39,6 +39,57 @@ weapp-vite ide logs --open
|
|
|
39
39
|
weapp-vite build
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
+
### 构建并上传
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
wv build --upload --dry-run
|
|
46
|
+
wv build --upload -p weapp
|
|
47
|
+
|
|
48
|
+
# 独立命令保留六端批量上传能力
|
|
49
|
+
wv upload --platform jd,swan
|
|
50
|
+
wv upload --platform all --dry-run
|
|
51
|
+
|
|
52
|
+
# 内置自动版本演练:不修改版本或锁文件
|
|
53
|
+
wv upload -p xhs,tt --mode test --bump patch --git-desc --dry-run
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`build --upload` 复用本次构建,构建成功并校验产物后才上传,不重复构建。六个平台为 `weapp/alipay/tt/xhs/jd/swan`;独立 `wv upload` 还支持逗号分隔或显式 `all`,每个目标先构建再上传,失败后停止后续目标。上传不自动提审或正式上线;`--dry-run` 只构建和检查产物,不校验凭据、不调用 SDK。
|
|
57
|
+
|
|
58
|
+
通常无需添加 `weapp.upload`:默认读取业务 `package.json.version`,说明自动生成为 `项目名@版本`;默认不升版、不读取 Git、不运行 npm。需要覆盖时传 `--uv` / `--desc` 或配置 `weapp.upload`;本地自动版本显式使用 CLI `--bump patch|minor|major` / `--git-desc`,二者分别与 `--uv` / `--desc` 冲突,不是 Vite 配置字段。真实升版需要本机 npm,只有 Git 说明要求已有提交的 Git 仓库。完整 `.env.test` / `.env.production`、独立 AppID、本地自动升版与 CI 配置见[上传环境与自动版本](https://vite.weapp.dev/guide/upload/environments.html)。普通 `build`、`dev/HMR` 不上传;配置仍正常求值。`build` 的上传专属参数必须与 `--upload` 一起使用,不能用于 watch 或 Web-only。
|
|
59
|
+
|
|
60
|
+
自动元数据在首次配置求值、编译前准备一次,批量共用;升版仅处理命令根目录的应用清单,不向父目录查找、不执行生命周期钩子、不 commit/tag/push。dry-run 不运行 npm、不修改版本或锁文件,直接导入 `package.json` 的构建代码仍读取原始版本。实际升版后的构建或上传失败不回滚,重试去掉 `--bump` 并复用原版本。完整边界见[本地速查](./upload.md#内置本地自动版本)。
|
|
61
|
+
|
|
62
|
+
`build -p all --upload` 是“小程序 + Web”,等两者都构建成功后只上传小程序,不等于独立 `upload -p all` 的六端批量上传。
|
|
63
|
+
|
|
64
|
+
需要 CI 报告时使用 `wv upload -p xhs,tt --json --timeout 180`:stdout 为单个 JSON 汇总,日志与官方进度进入 stderr;首次失败停止并保留未执行目标。超时仅限 SDK worker,不含构建;中断后不能推断远端取消,不自动重试。这两个选项不适用于 `build --upload`、`preview` 或 IDE,完整边界见[本地结果参考](./upload.md#结构化结果与本地超时)。
|
|
65
|
+
|
|
66
|
+
多个平台推荐使用一份 `weapp.multiPlatform.projectConfigs` 映射,公共字段用对象展开,各平台只提供 AppID 和差异;标准项目 JSON 由构建器生成,不必手工维护六份文件。原生文件方式仍可使用,完整示例见本地[上传速查](./upload.md#多平台与输出校验)。
|
|
67
|
+
|
|
68
|
+
按目标安装官方工具,并通过未提交的 `.env.<mode>.local` 或 CI Secrets 提供凭据,不要在 `weapp.upload` 中添加凭据字段。先读本地 [六端上传与预览速查](./upload.md),再按[分平台操作指南](https://vite.weapp.dev/guide/upload.html)配置 AppID、密钥或 Token。淘宝不在支持列表内;百度官方 CLI Token 会进入子进程参数,仅在可信隔离 runner 上运行。
|
|
69
|
+
|
|
70
|
+
旧的微信 IDE 顶层上传仍可原样执行,不额外触发 weapp-vite 构建:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
wv upload --project ./dist --version 1.2.3 --desc "release"
|
|
74
|
+
wv upload -p ./dist -v 1.2.3 -d "release"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
SDK 命令 `wv upload -p weapp` 无需 `--project`,会自动定位本次构建产物。这里的 `./dist` 只是假设旧 IDE 工程根位于该目录,不是默认值,应按实际 `project.config.json` 所在目录填写;旧入口省略定位参数时保持透传,不自动补 `dist`。
|
|
78
|
+
|
|
79
|
+
旧顶层语法每次只警告一次未来弃用,不要求立即迁移;稳定的显式 `wv ide upload -p ./dist -v 1.2.3 -d "release"` 不弃用、不警告,仍依赖 IDE 登录。若改用 SDK,需要从源码项目根安装 `miniprogram-ci`、配置 AppID、上传私钥和 IP 白名单,再执行 `wv build --upload -p weapp --uv 1.2.3 --desc "release"`;不复用 IDE 登录,也不能把旧 `--project` 的产物目录直接作为 SDK `[root]`。
|
|
80
|
+
|
|
81
|
+
`-p` 只有与明确旧标记(如 `--version/-v` 或 `--project`)一起出现时才是 IDE 项目目录,否则是平台,不猜测路径。新旧方言混用在 IDE、构建或升版副作用前报错,`--dry-run` / `--bump` / `--git-desc` / `--json` / `--timeout` 不能用于旧 IDE 上传。`wv upload --help` 是 SDK 帮助,`wv help upload` 保留旧 IDE 帮助并警告,`wv ide help upload` 不警告。完整标记、短参数和 `=` / `--` 规则见[本地速查](./upload.md#旧上传兼容与迁移)。
|
|
82
|
+
|
|
83
|
+
### 构建并预览
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
wv preview -p tt --mode test
|
|
87
|
+
wv preview -p xhs,jd,swan --mode production
|
|
88
|
+
wv preview -p all --dry-run
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
使用同一套六端工具与凭据,先构建再调用官方预览接口,不上传开发版本、不提审、不正式发布。微信返回本次生成的本地二维码图片;支付宝、京东返回二维码图片 URL;抖音、小红书、百度返回预览链接。百度仍需 `SWAN_MIN_VERSION`;预览不使用上传默认参数,不接受 `--uv`、`--bump` 或 `--git-desc`。旧微信 IDE 预览使用 `wv ide preview --project <IDE项目根>`,不额外构建。
|
|
92
|
+
|
|
42
93
|
### 4. 分包预下载审计
|
|
43
94
|
|
|
44
95
|
微信小程序可以检查静态跨分包跳转,并把建议输出为 JSON:
|
|
@@ -90,7 +141,7 @@ weapp-vite build
|
|
|
90
141
|
wv dev -p web --host
|
|
91
142
|
wv build -p web
|
|
92
143
|
weapp-vite open
|
|
93
|
-
weapp-vite preview --
|
|
144
|
+
weapp-vite preview -p weapp --mode test
|
|
94
145
|
weapp-vite ide preview --project ./dist/build/mp-weixin
|
|
95
146
|
weapp-vite ide logs --open
|
|
96
147
|
weapp-vite screenshot --project ./dist/build/mp-weixin --page pages/index/index --output .tmp/acceptance.png --json
|
package/dist/docs/index.md
CHANGED
|
@@ -16,21 +16,25 @@
|
|
|
16
16
|
8. 涉及 wevu 运行时与页面/组件/store 约束时读 `wevu-authoring.md`。
|
|
17
17
|
9. 涉及 Vue SFC 宏、模板约束与编辑器提示时读 `vue-sfc.md`、`volar.md` 与 `define-config-overloads.md`。
|
|
18
18
|
10. 编写页面或组件单测时读 `testing.md`。
|
|
19
|
-
11.
|
|
19
|
+
11. 上传或预览小程序时读 `upload.md`,核对平台、AppID、凭据与输出目录。
|
|
20
|
+
12. 遇到告警、prepare、截图、日志、依赖异常时读 `troubleshooting.md`。
|
|
20
21
|
|
|
21
22
|
## Included Docs
|
|
22
23
|
|
|
24
|
+
- `doctor.md`: 分层静态/构建/宿主证据、JSON/SARIF 与完整性退出码。
|
|
23
25
|
- `README.md`: weapp-vite npm 包内置文档入口,供 AI 与开发者优先读取本地版本说明。
|
|
24
26
|
- `mcp.md`: MCP、AI 工作流与 screenshot 验收说明。
|
|
25
27
|
- `volar.md`: Volar、JSON 宏与编辑器智能提示支持说明。
|
|
26
28
|
- `define-config-overloads.md`: defineConfig 类型重载与配置推导说明。
|
|
29
|
+
- `vite-plugin.md`: 实验性标准 Vite 插件、Vite+ alias 与分阶段支持边界。
|
|
27
30
|
- `getting-started.md`: CLI 命令、prepare、build、screenshot、MCP 等快速入口。
|
|
31
|
+
- `upload.md`: 六端上传/预览、AppID 与凭据、批量执行、CI 和淘宝支持边界。
|
|
28
32
|
- `ai-workflows.md`: AI 代理在其他仓库里使用 weapp-vite 的推荐工作流。
|
|
29
33
|
- `project-structure.md`: AGENTS.md、.weapp-vite、dist 与源码目录的职责说明。
|
|
30
34
|
- `weapp-config.md`: weapp 配置、autoRoutes、autoImportComponents、routeRules 与 chunk 策略。
|
|
31
35
|
- `glass-easel.md`: glass-easel 宿主配置、迁移诊断与无法无损自动改写的边界。
|
|
32
36
|
- `i18n.md`: 内置 locale 编译、WXS 模板翻译、运行时切换与分包实例边界。
|
|
33
|
-
- `uni-app-component-libraries.md`: 实验性的 uni-app 组件库转换、Wot UI 配置、
|
|
37
|
+
- `uni-app-component-libraries.md`: 实验性的 uni-app 组件库转换、Wot UI 配置、100 组件矩阵与双端边界。
|
|
34
38
|
- `wevu-authoring.md`: wevu 页面、组件、store、router 与事件契约的推荐写法。
|
|
35
39
|
- `vue-sfc.md`: definePageJson、definePageMeta、v-model 与模板兼容约束。
|
|
36
40
|
- `troubleshooting.md`: prepare、截图、日志、wevu 依赖与 dist 同步等常见排障。
|
package/dist/docs/mcp.md
CHANGED
|
@@ -24,6 +24,95 @@
|
|
|
24
24
|
5. 仓库级受限命令执行(`pnpm/node/git/rg`)
|
|
25
25
|
6. 面向改造和排障的标准 Prompt 模板
|
|
26
26
|
|
|
27
|
+
### Dashboard 证据查询与对象调查(DevFrame)
|
|
28
|
+
|
|
29
|
+
`wv dev --ui` / `wv build --ui` 可通过 DevFrame MCP 查询**当前运行中的 Dashboard**,并领取、回传对象调查。这与下文的 `wv mcp` 是两个入口:现有工具、Resources、Prompts、REST 和微信 IDE 会话保持不变,`wv mcp init` 不会改为连接 Dashboard。
|
|
30
|
+
|
|
31
|
+
在项目中安装面板及可选的 stdio 连接器:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pnpm add -D @weapp-vite/dashboard devframe@1.2.0 @devframes/agentic@1.2.0
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
启动 `wv dev --ui` / `wv build --ui` 后,Dashboard 自动开放本机 scoped MCP,无需生成令牌或配置认证环境变量。浏览器仍使用终端提供的 OTP magic link;MCP 不需要先完成浏览器授权。
|
|
38
|
+
|
|
39
|
+
默认 `standalone` 与 `--ui-host hub` 都发布同一 Dashboard 范围的 MCP 发现记录,端点为 `/__weapp-vite/__mcp`。Hub 的 `/__devframes/__mcp` 聚合入口仍关闭:该端点不继承宿主其他插件的工具、Resources 或 shared-state,也不授予文件修改或命令执行权限。`--no-mcp` 控制的是原有 CLI MCP 服务,不关闭随 UI 启动的 Dashboard scoped MCP。
|
|
40
|
+
|
|
41
|
+
在项目目录启动 stdio 连接器:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
pnpm exec devframe connect
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
支持 `mcpServers` 配置的客户端可使用:
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"mcpServers": {
|
|
52
|
+
"weapp-dashboard": {
|
|
53
|
+
"command": "pnpm",
|
|
54
|
+
"args": ["exec", "devframe", "connect"]
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
先调用 `devframe_connect_list-instances`,按项目与端口选择实例,再用 `devframe_connect_call-tool` 调用工具。实例只在真实监听后注册;关闭或重启时移除本实例的旧记录。若注册目录不可写,上游会输出诊断,可改用 `devframe connect --port <port> --base /__weapp-vite/` 显式探测终端 UI 地址中的端口。
|
|
61
|
+
|
|
62
|
+
| 工具 | 输入 | 结果 |
|
|
63
|
+
| --- | --- | --- |
|
|
64
|
+
| `weapp-vite_get-dashboard-state` | `{}` | 当前 sessionId、revision、报告描述符、调查状态与最近事件 |
|
|
65
|
+
| `weapp-vite_get-analyze-summary` | `{ "arg0": { "revision": 0 } }` | 包、文件、模块、已知字节总量及预算状态汇总 |
|
|
66
|
+
| `weapp-vite_query-analyze-packages` | `{ "arg0": { "revision": 0, "budgetStatus": "exceeded" } }` | 按包类型、名称、预算状态筛选,按体积、名称或预算比例排序 |
|
|
67
|
+
| `weapp-vite_query-analyze-artifacts` | `{ "arg0": { "revision": 0, "limit": 10 } }` | 最大产物;也可按 `packageId`、`moduleId`、类型和路径定位 |
|
|
68
|
+
| `weapp-vite_query-analyze-modules` | `{ "arg0": { "revision": 0, "duplicateOnly": true, "sortBy": "estimatedSavingBytes" } }` | 模块体积、跨包重复估算及独立分包边界提示 |
|
|
69
|
+
| `weapp-vite_compare-analyze-builds` | `{ "arg0": { "revision": 0, "scope": "file" } }` | 包、文件或模块的新增、删除、增长、缩小及构建总量差异 |
|
|
70
|
+
| `weapp-vite_query-runtime-events` | `{ "arg0": { "kind": "hmr", "limit": 10 } }` | 最近事件、HMR profile 和窗口保留/丢弃计数 |
|
|
71
|
+
| `weapp-vite_read-dashboard-file` | `{ "arg0": { "kind": "artifact", "path": "app.js", "revision": 0, "range": { "offset": 0, "limit": 4096 } } }` | 报告内源码或当前构建产物的有界文本片段 |
|
|
72
|
+
| `weapp-vite_get-analyze-page` | `{ "arg0": { "target": "current", "index": 0, "revision": 0 } }` | 全量导出用的 JSON 文本页,不是常规诊断的必经步骤 |
|
|
73
|
+
| `weapp-vite_list-investigations` | `{}` | 当前宿主会话的调查列表及列表版本,不含领取令牌 |
|
|
74
|
+
| `weapp-vite_get-investigation` | `{ "arg0": { "id": "<任务 UUID>" } }` | 单个调查的权威状态、任务版本及报告绑定 |
|
|
75
|
+
| `weapp-vite_claim-investigation` | `arg0`:`id`、`version`、`agentName` | 领取任务;仅本次响应返回私有 `claimToken` |
|
|
76
|
+
| `weapp-vite_propose-investigation` | `arg0`:`id`、`version`、`claimToken`、`proposal` | 回传精确路径、变更说明、检查与风险;服务端生成提案 ID |
|
|
77
|
+
| `weapp-vite_start-investigation` | `arg0`:`id`、`version`、`claimToken` | 消费浏览器对当前提案的授权,记录开始;不启动进程 |
|
|
78
|
+
| `weapp-vite_complete-investigation` | `arg0`:`id`、`version`、`claimToken`、`receipt` | 回传外部执行结果;不自动标记验证通过 |
|
|
79
|
+
|
|
80
|
+
示例 revision、路径和 ID 必须来自当前状态与查询结果。参数使用 DevFrame 原生的位置参数包装 `arg0`,结果提供对象型 `structuredContent`。推荐先取状态和摘要,再查询包/产物/模块,最后按需读取文件片段;无需下载整份报告自行排序或比较。
|
|
81
|
+
|
|
82
|
+
- 摘要和目录查询的 `target` 默认为 `current`,也可读 `previous` 的报告元数据;结果携带 `revision` 与 `reportHash`。列表默认 `offset: 0`、`limit: 20`,最多 100 项,返回匹配 `total` 和 `nextOffset`,末页为 `null`。报告更新后旧 revision 与过期异步读取会被拒绝,须重新取状态,不能混用跨版本页面。
|
|
83
|
+
- 包与产物的模块归属来自报告的模块使用记录,包含没有 chunk 贡献列表的资源源码。模块查询支持 `packageId`、`artifact`、`sourceType`、`query`,包与产物条件必须命中同一处归属。用返回的模块 `id` 查询产物可定位构建位置,不代表已经取得源码 importer 因果链。
|
|
84
|
+
- 模块 `bytes` 沿用共享分析的最大已知单份体积口径;缺失贡献时可使用原始体积估算。`estimatedSavingBytes` 不是保证可删除的字节,`hasIndependentPackage` 提示可能必须保留隔离。未记录大小的产物返回 `size: null`,摘要与包行的 `unmeasuredFiles` 标明未计入字节总量的文件。
|
|
85
|
+
- 预算复用构建侧的文件去重、分包 `packageBytes` 覆盖与 `runtimeBytes` 限额。摘要分别返回 `totalBudget`、`runtimeBudget`(未配置时为 `null`)和仅统计包的 `packageBudgets`;缺失体积或运行时归因时状态为 `unknown`,包查询支持 `budgetStatus: "unknown"`。`measurement` 区分 `file-bytes`、`upper-bound` 与 `unavailable`;运行时混合 chunk 的文件上界不是精确运行时代码量。摘要及包行的预算对象不附带全量 `files` 数组,须通过产物查询继续定位。
|
|
86
|
+
- 比较的 `scope` 为 `package`、`file` 或 `module`,可筛选 `packageId`、`change`、`query`。包筛选在模块归并前生效,`totals` 始终表示整个构建的产物总量。模块差异基于已记录的模块体积贡献并按来源身份归并;资源文件变化可用 `file` 查询。模块与文件增量不能相加。没有上次报告时返回 `available: false`、`totals: null`,不假造零基线。
|
|
87
|
+
- 比较中的缺失测量不视为零:对应 `currentBytes`/`previousBytes` 与 `deltaBytes` 返回 `null`,仍存在但不可判断增减的行标为 `change: "unmeasured"`(两边都缺失时也返回)。新增/删除保留成员变化,哪怕字节为零或未知。`totals.currentUnmeasuredFiles`/`previousUnmeasuredFiles` 标明完整性;任一文件未测量时,该侧总量和总增量为 `null`。列表先按已知增量绝对值排序,再列出未测量行。
|
|
88
|
+
- 事件支持 `kind`、`level`、精确 `source`、文本 `query` 和含时区的 ISO `since`/`until`(包含边界),按 ISO `occurredAt` 记录时间筛选,不比较本地化显示时间。事件独立于构建 revision;最多保留 24 条,`total` 是当前窗口的匹配数,`retention` 返回容量、保留数、实际丢弃数和最早保留时间。它不是持久历史,也不是小程序 console/network。
|
|
89
|
+
- 文件 `range` 使用零起始 UTF-16 码元偏移,`limit` 为 1–16384;返回 `totalCharacters` 与可继续读取的 `nextOffset`。`size` 仍是完整文件的 UTF-8 字节数。EOF 偏移返回空片段,超出 EOF 拒绝;省略 `range` 保留页面所需的全文读取。片段读取不会绕过单文件 2 MiB、报告 allowlist、根目录和符号链接限制。
|
|
90
|
+
- 源码是受限的实时磁盘读取;产物只来自当前分析快照,不回退到实时 `dist`,也不提供上一快照的文件内容。只有确需导出完整报告时才按描述符 `pages` 依次拼接 JSON 文本页。
|
|
91
|
+
|
|
92
|
+
证据查询复用同一份报告与读取边界;预算、重复分析和比较由浏览器安全的 `weapp-vite/dashboard/analyze` 纯计算入口统一提供,UI、MCP 与 Markdown 报告不另建分析服务。该入口导出 `createAnalyzeBudgetCheck`、`createDuplicateModuleInsights`、`createAnalyzeComparison` 及对应类型。新增的四个调查动作只写任务元数据;MCP 不提供通用 shared-state、任意文件写入或命令执行。
|
|
93
|
+
|
|
94
|
+
直接使用 Streamable HTTP 时,地址为 `http://127.0.0.1:<port>/__weapp-vite/__mcp`,不需要 `Authorization`,但必须发送规范 loopback `Origin`,例如 `http://127.0.0.1:<port>`。MCP 协议请求(POST / GET / DELETE)缺少或携带不合法的 Origin,或 socket 对端非 loopback / 无法识别时返回 403;`Forwarded` / `X-Forwarded-For` 等请求头不能替代真实连接对端。OPTIONS 预检由 Vite 原生 CORS 处理,可能返回空的 204;它不执行 MCP 工具,也不放宽后续协议请求的门禁。
|
|
95
|
+
|
|
96
|
+
该模式信任同机进程,不区分本机用户。不要通过代理、隧道或端口转发对外发布 Dashboard:本机代理会使远端请求表现为本机连接。共享机器上需要身份隔离时,应使用具有相应认证策略的宿主,而不是将独立 Dashboard 当作用户级权限边界。
|
|
97
|
+
|
|
98
|
+
嵌入 Vite DevTools 时,同一份定义可由宿主的 MCP 暴露,但认证、Origin、共享状态和发现策略仍由宿主配置持有;独立 Dashboard 的本机策略不会打开或收窄共享宿主的 MCP。
|
|
99
|
+
|
|
100
|
+
#### 调查、授权与复验
|
|
101
|
+
|
|
102
|
+
1. 在 Dashboard「对象检查」中选择真实包、产物或模块落点,创建并编辑调查。提交绑定 `{ sessionId, revision, reportHash }`、目标和问题;后续浏览其他对象不会改绑草稿。仅有模块落点但没有对应真实产物时,不提供调查提交或内容读取。
|
|
103
|
+
2. 外部客户端先取得状态与任务,再用当前 `id`、`version` 领取。保存领取响应中的 `claimToken`,不要写入共享上下文;它不会出现在列表、状态通知或复制文本中。`agentName` 是自报名称,不是认证身份或在线心跳。
|
|
104
|
+
3. 使用证据查询调查,再回传 `proposal: { summary, changes: [{ path, description }], checks, risks }`。至少列出一项变更与一项检查;提议的检查不是已执行结果。浏览器展示路径、风险和服务端生成的提案 ID,用户勾选并明确授权该提案;替换提案、报告变化或任务版本变化后不能沿用旧确认。
|
|
105
|
+
4. 客户端重新读取任务版本,再调用 `start-investigation`。成功仅记录本次提案的执行意图;文件和命令权限仍须由外部工作区单独授予。真正执行发生在外部,Dashboard 不运行命令,也不会因为复制上下文或提交任务而启动 Agent。
|
|
106
|
+
5. 执行后回传 `receipt: { outcome, summary, changedFiles, checks: [{ command, outcome, summary }] }`。顶层 `outcome` 为 `completed` 或 `failed`,检查结果为 `passed`、`failed` 或 `not-run`。浏览器将这些内容标为 Agent 自报,不把它们当作独立验证。
|
|
107
|
+
6. 回报完成后,在同一宿主生成更新报告,实际检查对象和行为,再由浏览器提交复验摘要与明确确认。原报告、缺少摘要或未确认时不能复验。对象已从新报告删除时,复验测量为 `null`,不把缺失当作零字节;新报告本身也不证明修复或节省量。
|
|
108
|
+
|
|
109
|
+
创建、取消、授权和复验只向浏览器 RPC 开放,不列入 Agent 工具,猜测工具名也不能调用。所有已有任务变更使用 `id`/`version` 比较并更新;冲突后重新取权威状态,不盲目重放变更。调查变更有独立版本,不递增构建 revision。
|
|
110
|
+
|
|
111
|
+
报告更新会将尚未开始执行的提交、领取、提案或授权置为 `stale`,撤销旧领取与授权;执行中及已有回报保留原报告绑定。取消只停止接受本任务的后续回报,不能终止外部进程或撤销文件修改。任务保存在宿主会话内,最多 32 项;最旧已结束记录可能被移除,活动任务占满时拒绝新增,不是持久审计库。
|
|
112
|
+
|
|
113
|
+
「浏览器授权」是协议入口与明确确认的区分,不是不可伪造的人类身份或操作系统权限隔离。同机进程的信任边界仍适用。报告 hash 固定报告内容,不固定实时源码;原始产物、Gzip、Brotli、模块归因和源码字节必须分开解释,不能相加或推导虚假的优化收益。
|
|
114
|
+
|
|
115
|
+
|
|
27
116
|
## 2. 快速接入客户端
|
|
28
117
|
|
|
29
118
|
如果你的目标不是“研究 MCP 地址”,而是尽快让 AI 工具开始可用,推荐直接使用下面这组命令:
|
|
@@ -302,7 +391,7 @@ MCP 服务端做了以下约束:
|
|
|
302
391
|
|
|
303
392
|
1. `wv mcp init <client>` 写入失败:先确认目标配置文件可写。
|
|
304
393
|
2. `wv mcp doctor <client>` 失败:优先看配置文件里是否已经生成 `weapp-vite-*` server 条目。
|
|
305
|
-
3. `weapp-vite mcp` 启动失败:确认 Node 版本符合 `^
|
|
394
|
+
3. `weapp-vite mcp` 启动失败:确认 Node 版本符合 `^22.18.0 || ^24.11.0 || >=26.0.0`。
|
|
306
395
|
4. AI 看不到包内容:检查 `--workspace-root` 是否指向正确仓库根目录。
|
|
307
396
|
5. 命令执行失败:确认命令在白名单中,并检查子目录权限与脚本名是否存在。
|
|
308
397
|
|
|
@@ -355,3 +444,7 @@ MCP 服务端做了以下约束:
|
|
|
355
444
|
4. 如果命令通过,输出 compare-ok;如果对比失败,输出 compare-failed。
|
|
356
445
|
5. 最后汇总:执行命令、关键输出、最终结论。
|
|
357
446
|
```
|
|
447
|
+
|
|
448
|
+
## 验收任务
|
|
449
|
+
|
|
450
|
+
现有服务提供 weapp_project_inspect、weapp_acceptance_start/status/cancel/report,无需模型 Key。验收与其他运行操作按工程互斥;任务使用独立日志订阅。HTTP 请求共享任务服务,断开单次请求不会丢失任务;服务关闭保存取消结果,重启不重放交互。
|
package/dist/docs/testing.md
CHANGED
|
@@ -20,7 +20,7 @@ export default defineConfig({
|
|
|
20
20
|
## 接入
|
|
21
21
|
|
|
22
22
|
```ts
|
|
23
|
-
import { mpcoreTest } from '@mpcore/vitest'
|
|
23
|
+
import { mpcoreTest } from '@mpcore/vitest/config'
|
|
24
24
|
import { defineConfig } from 'vitest/config'
|
|
25
25
|
|
|
26
26
|
export default defineConfig({
|
|
@@ -37,7 +37,34 @@ const project = await createWeappViteTestProject({ cwd: process.cwd() })
|
|
|
37
37
|
const result = await project.renderPage('/pages/index/index?source=test')
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
默认在 `.weapp-vite/test-artifacts/` 下按进程、配置和构建批次创建独立产物。缓存同时检查源码、配置、编译依赖和产物内容;新构建不会覆盖正在运行的测试所用批次。显式 `outDir` 由调用方负责避免并发共享。所有测试关闭后,可以清理这个生成目录。
|
|
41
|
+
|
|
42
|
+
构建调用 `weapp-vite/test` 程序化入口,最终文件仍由 Vite/Rolldown emit;不会启动 CLI 或由测试适配器手写 bundle。`isTestArtifactCurrent(artifact)` 可检查当前进程生成的产物是否仍然有效。
|
|
43
|
+
|
|
44
|
+
## Vitest watch 联动
|
|
45
|
+
|
|
46
|
+
在配置中显式接入产物构建和监听:
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
import { mpcoreTest } from '@mpcore/vitest/config'
|
|
50
|
+
import { buildWeappViteTestArtifact, watchWeappViteTestArtifact } from '@mpcore/weapp-vite'
|
|
51
|
+
import { defineConfig } from 'vitest/config'
|
|
52
|
+
|
|
53
|
+
const options = { cwd: import.meta.dirname }
|
|
54
|
+
|
|
55
|
+
export default defineConfig({
|
|
56
|
+
plugins: [mpcoreTest({
|
|
57
|
+
artifact: {
|
|
58
|
+
build: () => buildWeappViteTestArtifact(options),
|
|
59
|
+
watch: callbacks => watchWeappViteTestArtifact({ ...options, ...callbacks }),
|
|
60
|
+
},
|
|
61
|
+
})],
|
|
62
|
+
})
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
测试文件从 `@mpcore/vitest` 导入 `createMpcoreTest()`,无参调用会使用当前 runner 提供的完整产物,每个测试创建独立运行时。一次性执行只构建一次;watch 在源码、配置及编译依赖重建完成后重新运行所属测试项目。退出会等待进行中的构建并关闭监听。不要从测试配置导入包含 fixture 的根入口,配置入口使用 `/config`。
|
|
66
|
+
|
|
67
|
+
Vitest 的源码覆盖率、生成的小程序 JS 覆盖率和模拟器自身覆盖率属于不同观察面;此适配不会把它们自动合并成业务源码覆盖率。
|
|
41
68
|
|
|
42
69
|
## 组件
|
|
43
70
|
|
|
@@ -39,6 +39,10 @@ weapp-vite ide logs --open
|
|
|
39
39
|
|
|
40
40
|
如果 DevTools 未能自动连接,先运行 `wv ide doctor --json`。`wv open`、`wv dev -o` 和 `wv ide logs --open` 默认先通过官方 CLI 打开项目,再连接 automator;只有需要兼容旧链路时才使用 `--ide-open-strategy automator`。
|
|
41
41
|
|
|
42
|
+
`wv ide doctor` 的原生 `islogin` 查询可能拉起 IDE;只需要静态诊断时使用 `wv doctor --format json`。只读 automator 连接失败不会删除持久化会话记录。连接成功后若 `Tool.getInfo` 失败,`automator` 仍为 ok,`tool` 单独标记 warning,并释放本次连接;不能据此认定登录失效。
|
|
43
|
+
|
|
44
|
+
登录诊断仅在原生响应明确包含 `login: true/false` 时确认状态。CLI 退出成功但没有明确结果、查询超时或执行失败均标为 unknown,不再误报已登录或未登录。
|
|
45
|
+
|
|
42
46
|
如果项目启用了 `weapp.forwardConsole.enabled = 'auto'`,AI 终端场景下 `dev --open` 也可能自动附加日志桥。
|
|
43
47
|
|
|
44
48
|
## `.vue` 文件存在,但提示未安装 `wevu`
|
|
@@ -62,3 +66,7 @@ pnpm --filter weapp-vite build
|
|
|
62
66
|
```
|
|
63
67
|
|
|
64
68
|
再做下游验证。
|
|
69
|
+
|
|
70
|
+
## IDE 恢复与窗口保留
|
|
71
|
+
|
|
72
|
+
打开项目、刷新索引或截图重试失败时,CLI 会保留现有开发者工具窗口,只重试目标项目连接;不会自动退出整个应用或按进程名终止宿主。`--no-open-recovery` 可禁用打开后的自动重试。需要真正关闭窗口时,请在 IDE 中明确选择目标项目;`wv close` 失败会返回非零退出码,不会升级为系统级退出。
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# uni-app 组件库兼容(实验性)
|
|
2
2
|
|
|
3
3
|
> [!WARNING]
|
|
4
|
-
> 这是实验性能力,当前兼容基线固定为 `@wot-ui/ui@2.2
|
|
4
|
+
> 这是实验性能力,当前兼容基线固定为 `@wot-ui/ui@2.3.2` 与 `uview-plus@3.8.130`。默认完全关闭;只有项目源码和 `weapp.uniApp.include` 明确列出的 npm 包会进入 uni-app 方言转换。
|
|
5
5
|
|
|
6
6
|
## uview-plus
|
|
7
7
|
|
|
8
8
|
```bash
|
|
9
|
-
pnpm add weapp-vite wevu uview-plus@3.8.
|
|
9
|
+
pnpm add weapp-vite wevu uview-plus@3.8.130
|
|
10
10
|
```
|
|
11
11
|
|
|
12
12
|
```ts
|
|
@@ -36,9 +36,9 @@ export default defineConfig({
|
|
|
36
36
|
|
|
37
37
|
应用启动时调用 `mount$u()`,再把 `uni.$u` 同步到 `app.config.globalProperties.$u`;全局样式引入 `uview-plus/index.scss`。不要使用会在 Web 调用 `Vue.component` 的默认插件注册流程。
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
上游 3.8.130 已修复 `u-barcode` 获取 canvas 引用前的组件实例 `this.$nextTick()` 等待逻辑,仓库已移除对应补丁。旧版的选择器、主题变量及其他组件兼容补丁也已由上游修复。
|
|
40
40
|
|
|
41
|
-
`UviewPlusResolver()` 同时解析 `u-*` 与 `up-*` 标签。静态清单以 3.8.
|
|
41
|
+
`UviewPlusResolver()` 同时解析 `u-*` 与 `up-*` 标签。静态清单以 3.8.130 npm 发布包中的 141 个源码入口为准,139 个具名组件各有独立测试页。`u-action-sheet-data` 与 `u-column-notice` 没有组件名,分别由 action-sheet 和 notice-bar 页面覆盖。
|
|
42
42
|
|
|
43
43
|
`supportFilesStrategy` 默认为 `'used'`;需要生成全量组件辅助文件时可传入 `UviewPlusResolver({ supportFilesStrategy: 'full' })`。
|
|
44
44
|
|
|
@@ -59,7 +59,7 @@ pnpm e2e:ide:component-libraries:visual:full
|
|
|
59
59
|
## 安装
|
|
60
60
|
|
|
61
61
|
```bash
|
|
62
|
-
pnpm add weapp-vite wevu @wot-ui/ui@2.2
|
|
62
|
+
pnpm add weapp-vite wevu @wot-ui/ui@2.3.2
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
## 配置
|
|
@@ -82,7 +82,7 @@ export default defineConfig({
|
|
|
82
82
|
})
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
-
`WotUiResolver()` 使用 Wot UI 2.2
|
|
85
|
+
`WotUiResolver()` 使用 Wot UI 2.3.2 的真实公开 SFC 清单建立标签映射,并返回 `sourceType: 'wevu-sfc'` 与可解析的源码 ID。不要自行假设所有 `wd-*` 标签都能通过目录名拼接得到入口。
|
|
86
86
|
|
|
87
87
|
`weapp.uniApp` 的行为:
|
|
88
88
|
|
|
@@ -109,7 +109,7 @@ pnpm build:web
|
|
|
109
109
|
|
|
110
110
|
## 兼容矩阵
|
|
111
111
|
|
|
112
|
-
矩阵以 `@wot-ui/ui@2.2
|
|
112
|
+
矩阵以 `@wot-ui/ui@2.3.2/global.d.ts` 实际公开的 100 个 Vue SFC 为准。2.3.2 新增 `wd-qr-code`,每个组件都有独立页面;依赖父容器的组件会在自己的页面内使用最小父组件承载。
|
|
113
113
|
|
|
114
114
|
```text
|
|
115
115
|
组件 | 独立页 | Web | 微信小程序 | Headless
|
|
@@ -172,6 +172,7 @@ wd-picker-view | 是 | 行为+移动/桌面视觉 | 行为+视觉 | 行为
|
|
|
172
172
|
wd-popover | 是 | 行为+移动/桌面视觉 | 行为+视觉 | 行为
|
|
173
173
|
wd-popup | 是 | 行为+移动/桌面视觉 | 行为+视觉 | 行为
|
|
174
174
|
wd-progress | 是 | 行为+移动/桌面视觉 | 行为+视觉 | 行为
|
|
175
|
+
wd-qr-code | 是 | 行为+移动/桌面视觉 | 行为+视觉 | 行为
|
|
175
176
|
wd-radio | 是 | 行为+移动/桌面视觉 | 行为+视觉 | 行为
|
|
176
177
|
wd-radio-group | 是 | 行为+移动/桌面视觉 | 行为+视觉 | 行为
|
|
177
178
|
wd-rate | 是 | 行为+移动/桌面视觉 | 行为+视觉 | 行为
|