weapp-vite 6.12.0 → 6.12.3

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.
@@ -0,0 +1,108 @@
1
+ # defineConfig 重载与类型推导说明
2
+
3
+ 本文用于说明 `weapp-vite/config` 中 `defineConfig` 的重载行为、推荐写法,以及为什么某些写法会影响编辑器里的 Hover 文档和跳转能力。
4
+
5
+ ## 目标
6
+
7
+ `defineConfig` 的核心目标有两个:
8
+
9
+ 1. 让 `vite.config.ts` 中 `weapp` 配置获得稳定的字段提示与类型校验。
10
+ 2. 保留扩展能力(允许额外自定义字段),兼顾严格与灵活。
11
+
12
+ ## 支持的入参形态
13
+
14
+ `defineConfig` 支持以下主要形态:
15
+
16
+ 1. **对象配置**:`defineConfig({ ... })`
17
+ 2. **Promise 对象配置**:`defineConfig(Promise.resolve({ ... }))`
18
+ 3. **无 env 同步函数**:`defineConfig(() => ({ ... }))`
19
+ 4. **无 env 异步函数**:`defineConfig(async () => ({ ... }))`
20
+ 5. **有 env 同步函数**:`defineConfig((env) => ({ ... }))`
21
+ 6. **有 env 异步函数**:`defineConfig(async (env) => ({ ... }))`
22
+ 7. **有 env 同步/异步混合返回**:`defineConfig((env) => env.command === 'build' ? Promise.resolve(...) : (...))`
23
+
24
+ ## 关键推导规则
25
+
26
+ ### 1) 重载顺序会直接影响编辑器体验
27
+
28
+ 在 TypeScript 中,函数重载按声明顺序匹配。
29
+
30
+ 为了保证 `vite.config.ts` 里对象字面量字段(例如 `weapp.srcRoot`)能拿到**上下文类型**,并正确展示 JSDoc / 支持跳转,需要把更“具体”的同步重载放在前面,避免过早命中宽泛的联合重载。
31
+
32
+ ### 2) 无 env 异步函数的返回值
33
+
34
+ `defineConfig(async () => ({ ... }))` 对应 `() => UserConfig | Promise<UserConfig>` 的函数签名。
35
+
36
+ 这意味着调用返回函数时,类型是:
37
+
38
+ - `UserConfig | Promise<UserConfig>`
39
+
40
+ 如果业务侧明确使用 `async`,建议按 Promise 分支处理。
41
+
42
+ ### 3) `UserConfigLoose` 的兜底行为
43
+
44
+ `defineConfig` 允许对象中带额外字段(例如 `customFeature`),用于兼容插件场景。
45
+
46
+ 但使用这类“宽松扩展”时,额外字段会按更宽泛类型处理,建议:
47
+
48
+ - 标准字段走官方类型(如 `weapp.srcRoot`)
49
+ - 自定义字段尽量在项目内补充独立类型约束
50
+
51
+ ## 推荐写法
52
+
53
+ ### 推荐:无 env 同步函数(最稳定)
54
+
55
+ ```ts
56
+ import { defineConfig } from 'weapp-vite/config'
57
+
58
+ export default defineConfig(() => ({
59
+ weapp: {
60
+ srcRoot: 'src',
61
+ },
62
+ }))
63
+ ```
64
+
65
+ ### 推荐:有 env 分支
66
+
67
+ ```ts
68
+ import { defineConfig } from 'weapp-vite/config'
69
+
70
+ export default defineConfig(env => ({
71
+ weapp: {
72
+ srcRoot: env.command === 'build' ? 'src-build' : 'src-dev',
73
+ },
74
+ }))
75
+ ```
76
+
77
+ ### 谨慎:过度动态的混合返回
78
+
79
+ ```ts
80
+ import { defineConfig } from 'weapp-vite/config'
81
+
82
+ export default defineConfig((env) => {
83
+ if (env.command === 'build') {
84
+ return Promise.resolve({ weapp: { srcRoot: 'src-build' } })
85
+ }
86
+ return { weapp: { srcRoot: 'src-dev' } }
87
+ })
88
+ ```
89
+
90
+ 这种写法可用,但返回类型会变成联合类型,调用侧需要兼容两种分支。
91
+
92
+ ## 常见问题排查
93
+
94
+ ### Hover 无文档、Command+Click 不能跳转
95
+
96
+ 优先检查:
97
+
98
+ 1. 是否使用了 `import { defineConfig } from 'weapp-vite/config'`
99
+ 2. 是否在 `tsconfig.node.json` 中包含 `vite.config.ts`
100
+ 3. 是否命中过于宽泛的重载(会导致字段退化为局部字面量推断)
101
+ 4. 依赖是否已安装且类型入口可解析
102
+
103
+ ## 回归测试
104
+
105
+ 以下测试用于确保上述行为稳定:
106
+
107
+ - `packages/weapp-vite/test/config-intellisense.test.ts`
108
+ - `packages/weapp-vite/test-d/config-defineConfig.test-d.ts`
@@ -0,0 +1,74 @@
1
+ # Getting Started
2
+
3
+ ## CLI 别名
4
+
5
+ `weapp-vite` 和 `wv` 完全等价。
6
+
7
+ ```bash
8
+ weapp-vite build
9
+ wv build
10
+ ```
11
+
12
+ ## 最小工作流
13
+
14
+ ### 1. 准备支持文件
15
+
16
+ ```bash
17
+ weapp-vite prepare
18
+ ```
19
+
20
+ 如果项目里存在 `.weapp-vite` 支持文件缺失或过期,这一步会更新它们。
21
+
22
+ ### 2. 本地开发
23
+
24
+ ```bash
25
+ weapp-vite dev
26
+ weapp-vite dev --open
27
+ ```
28
+
29
+ 如果需要打开微信开发者工具并把日志桥接回终端,可使用:
30
+
31
+ ```bash
32
+ weapp-vite dev --open
33
+ weapp-vite ide logs --open
34
+ ```
35
+
36
+ ### 3. 构建
37
+
38
+ ```bash
39
+ weapp-vite build
40
+ ```
41
+
42
+ ### 4. 截图验收
43
+
44
+ ```bash
45
+ weapp-vite screenshot --project ./dist/build/mp-weixin --page pages/index/index --output .tmp/acceptance.png --json
46
+ ```
47
+
48
+ ### 5. 启动 MCP
49
+
50
+ ```bash
51
+ weapp-vite mcp
52
+ ```
53
+
54
+ ## 何时先读哪些文档
55
+
56
+ - 命令、脚手架、AI 工作流:[`ai-workflows.md`](./ai-workflows.md)
57
+ - 目录结构、`AGENTS.md`、`.weapp-vite`:[`project-structure.md`](./project-structure.md)
58
+ - `vite.config.ts` 与 `weapp` 配置:[`weapp-config.md`](./weapp-config.md)
59
+ - wevu 页面/组件/store 写法:[`wevu-authoring.md`](./wevu-authoring.md)
60
+ - Vue SFC 宏、`definePageMeta`、`v-model`:[`vue-sfc.md`](./vue-sfc.md)
61
+
62
+ ## 常见命令
63
+
64
+ ```bash
65
+ weapp-vite dev
66
+ weapp-vite dev --open
67
+ weapp-vite build
68
+ weapp-vite open
69
+ weapp-vite preview --project ./dist/build/mp-weixin
70
+ weapp-vite ide preview --project ./dist/build/mp-weixin
71
+ weapp-vite ide logs --open
72
+ weapp-vite screenshot --project ./dist/build/mp-weixin --page pages/index/index --output .tmp/acceptance.png --json
73
+ weapp-vite mcp
74
+ ```
@@ -0,0 +1,30 @@
1
+ # weapp-vite dist docs
2
+
3
+ 这个目录会随 `weapp-vite` npm 包一起发布,供 AI 代理和开发者优先读取与当前包版本匹配的本地文档。
4
+
5
+ 这不是 `website` 的完整镜像,而是面向 AI 与离线开发场景的精简本地知识包。
6
+
7
+ 推荐顺序:
8
+
9
+ 1. 先读 `README.md` 与 `getting-started.md` 获取总体能力与常用命令。
10
+ 2. 涉及 AI / MCP / screenshot / DevTools logs 时读 `ai-workflows.md` 与 `mcp.md`。
11
+ 3. 涉及项目目录、`AGENTS.md`、`.weapp-vite` 时读 `project-structure.md`。
12
+ 4. 涉及 `vite.config.ts`、`weapp` 配置与 chunk 策略时读 `weapp-config.md`。
13
+ 5. 涉及 wevu 运行时与页面/组件/store 约束时读 `wevu-authoring.md`。
14
+ 6. 涉及 Vue SFC 宏、模板约束与编辑器提示时读 `vue-sfc.md`、`volar.md` 与 `define-config-overloads.md`。
15
+ 7. 遇到告警、prepare、截图、日志、依赖异常时读 `troubleshooting.md`。
16
+
17
+ ## Included Docs
18
+
19
+ - `README.md`: weapp-vite npm 包内置文档入口,供 AI 与开发者优先读取本地版本说明。
20
+ - `mcp.md`: MCP、AI 工作流与 screenshot 验收说明。
21
+ - `volar.md`: Volar、JSON 宏与编辑器智能提示支持说明。
22
+ - `define-config-overloads.md`: defineConfig 类型重载与配置推导说明。
23
+ - `getting-started.md`: CLI 命令、prepare、build、screenshot、MCP 等快速入口。
24
+ - `ai-workflows.md`: AI 代理在其他仓库里使用 weapp-vite 的推荐工作流。
25
+ - `project-structure.md`: AGENTS.md、.weapp-vite、dist 与源码目录的职责说明。
26
+ - `weapp-config.md`: weapp 配置、autoRoutes、autoImportComponents、routeRules 与 chunk 策略。
27
+ - `wevu-authoring.md`: wevu 页面、组件、store、router 与事件契约的推荐写法。
28
+ - `vue-sfc.md`: definePageJson、definePageMeta、v-model 与模板兼容约束。
29
+ - `troubleshooting.md`: prepare、截图、日志、wevu 依赖与 dist 同步等常见排障。
30
+
@@ -0,0 +1,230 @@
1
+ # weapp-vite MCP 集成使用指南
2
+
3
+ ## 1. 能力概览
4
+
5
+ `weapp-vite` 现在内置了对 `weapp-vite/mcp` 的集成,支持直接通过 `weapp-vite mcp` 启动 MCP Server(`stdio` 传输)。
6
+
7
+ 如果你是在其他仓库里通过 npm 依赖使用 `weapp-vite`,建议先让 AI 读取本地随包文档目录:
8
+
9
+ - `node_modules/weapp-vite/dist/docs/index.md`
10
+ - `node_modules/weapp-vite/dist/docs/README.md`
11
+ - `node_modules/weapp-vite/dist/docs/mcp.md`
12
+
13
+ 这样可以优先命中与当前安装版本一致的本地说明,而不是依赖可能过期的外部网页或模型记忆。
14
+
15
+ 这个 MCP Server 主要面向 AI 编程助手,暴露了 `weapp-vite / wevu / wevu-compiler` 的关键研发能力:
16
+
17
+ 1. 工作区能力目录(版本、脚本、文档)
18
+ 2. 源码文件列表、按行读取、全文检索
19
+ 3. 包级脚本执行(`pnpm run`)
20
+ 4. `weapp-vite` CLI 调用
21
+ 5. 仓库级受限命令执行(`pnpm/node/git/rg`)
22
+ 6. 面向改造和排障的标准 Prompt 模板
23
+
24
+ ## 2. 启动方式
25
+
26
+ ### 2.0 CLI 自动启动(默认关闭)
27
+
28
+ 默认情况下,`weapp-vite` 不会在 CLI 启动时自动拉起 MCP 服务。
29
+ 如果你希望开发命令执行时自动拉起本地 MCP HTTP 服务(`streamable-http`),可在 `vite.config.ts` 显式开启:
30
+
31
+ ```ts
32
+ import { defineConfig } from 'weapp-vite/config'
33
+
34
+ export default defineConfig({
35
+ weapp: {
36
+ mcp: {
37
+ enabled: true,
38
+ autoStart: true,
39
+ },
40
+ },
41
+ })
42
+ ```
43
+
44
+ 默认地址:
45
+
46
+ - `http://127.0.0.1:3088/mcp`
47
+
48
+ 完全关闭 MCP:
49
+
50
+ ```ts
51
+ import { defineConfig } from 'weapp-vite/config'
52
+
53
+ export default defineConfig({
54
+ weapp: {
55
+ mcp: false,
56
+ },
57
+ })
58
+ ```
59
+
60
+ ### 2.1 CLI 启动(推荐)
61
+
62
+ 在 monorepo 根目录或任意子目录执行:
63
+
64
+ ```bash
65
+ weapp-vite mcp
66
+ ```
67
+
68
+ 可选指定工作区根路径:
69
+
70
+ ```bash
71
+ weapp-vite mcp --workspace-root /path/to/weapp-vite
72
+ ```
73
+
74
+ 以 HTTP 方式手动启动:
75
+
76
+ ```bash
77
+ weapp-vite mcp --transport streamable-http --host 127.0.0.1 --port 3088 --endpoint /mcp
78
+ ```
79
+
80
+ 说明:
81
+
82
+ 1. 不传 `--workspace-root` 时,会从当前目录向上自动定位 `pnpm-workspace.yaml`。
83
+ 2. `--transport stdio` 通过标准输入输出通信,不会启动 HTTP 端口。
84
+ 3. `--transport streamable-http` 会启动本地 HTTP 服务,可供支持 URL 连接的 MCP Client 使用。
85
+
86
+ ### 2.2 程序化启动
87
+
88
+ `weapp-vite` 暴露了 `weapp-vite/mcp` 子路径,可直接在 Node 脚本中使用。
89
+
90
+ ```ts
91
+ import { startWeappViteMcpServer } from 'weapp-vite/mcp'
92
+
93
+ await startWeappViteMcpServer({
94
+ workspaceRoot: process.cwd(),
95
+ })
96
+ ```
97
+
98
+ 如果你需要自定义生命周期,继续通过 `weapp-vite/mcp` 即可:
99
+
100
+ ```ts
101
+ import { startStdioServer } from 'weapp-vite/mcp'
102
+
103
+ await startStdioServer({
104
+ workspaceRoot: process.cwd(),
105
+ })
106
+ ```
107
+
108
+ 如果你需要手动控制 `stdio` / `streamable-http` 两种 transport,也可以直接调用:
109
+
110
+ ```ts
111
+ import { startWeappViteMcpServer } from 'weapp-vite/mcp'
112
+
113
+ const handle = await startWeappViteMcpServer({
114
+ workspaceRoot: process.cwd(),
115
+ transport: 'streamable-http',
116
+ host: '127.0.0.1',
117
+ port: 3088,
118
+ endpoint: '/mcp',
119
+ })
120
+
121
+ await handle.close?.()
122
+ ```
123
+
124
+ ## 3. 客户端接入示例
125
+
126
+ 以下是通用的 MCP Client `stdio` 配置示例,请按你的客户端格式调整字段名:
127
+
128
+ ```json
129
+ {
130
+ "mcpServers": {
131
+ "weapp-vite": {
132
+ "command": "weapp-vite",
133
+ "args": [
134
+ "mcp",
135
+ "--workspace-root",
136
+ "/absolute/path/to/weapp-vite"
137
+ ]
138
+ }
139
+ }
140
+ }
141
+ ```
142
+
143
+ 如果你是仓库开发者,也可以直接指向本地脚本命令(例如 `pnpm` 脚本)来启动同一服务。
144
+
145
+ ## 4. 可用 Tools
146
+
147
+ 1. `workspace_catalog`
148
+ 2. `list_source_files`
149
+ 3. `read_source_file`
150
+ 4. `search_source_code`
151
+ 5. `run_package_script`
152
+ 6. `run_weapp_vite_cli`
153
+ 7. `run_repo_command`
154
+
155
+ 建议使用顺序:
156
+
157
+ 1. 先调用 `workspace_catalog` 获取可操作包与脚本。
158
+ 2. 再用 `search_source_code` / `read_source_file` 做定位。
159
+ 3. 最后用 `run_package_script` 或 `run_repo_command` 做验证。
160
+
161
+ ## 5. 可用 Resources
162
+
163
+ 1. `weapp-vite://workspace/catalog`
164
+ 2. `weapp-vite://docs/{package}/README.md`
165
+ 3. `weapp-vite://docs/{package}/CHANGELOG.md`
166
+ 4. `weapp-vite://source/{package}?path={path}`
167
+
168
+ `{package}` 目前支持:
169
+
170
+ 1. `weapp-vite`
171
+ 2. `wevu`
172
+ 3. `wevu-compiler`
173
+
174
+ ## 6. 可用 Prompts
175
+
176
+ 1. `plan-weapp-vite-change`
177
+ 2. `debug-wevu-runtime`
178
+
179
+ 典型用途:
180
+
181
+ 1. 需求改造前先生成实施计划。
182
+ 2. `wevu` 生命周期或响应式问题排查时快速建立诊断框架。
183
+
184
+ ## 7. 安全边界与限制
185
+
186
+ MCP 服务端做了以下约束:
187
+
188
+ 1. 文件访问限制在工作区根目录内,阻止路径越界。
189
+ 2. 命令执行限制在白名单:`pnpm/node/git/rg`。
190
+ 3. 命令与文件读取有输出截断与超时控制,避免上下文爆炸。
191
+
192
+ 建议在 CI 或团队环境中继续加上外层沙箱策略(容器、只读挂载、命令审计)。
193
+
194
+ ## 8. 故障排查
195
+
196
+ 1. `weapp-vite mcp` 启动失败:先确认 Node 版本符合 `^20.19.0 || >=22.12.0`。
197
+ 2. AI 看不到包内容:检查 `--workspace-root` 是否指向正确仓库根目录。
198
+ 3. 命令执行失败:确认命令在白名单中,并检查子目录权限与脚本名是否存在。
199
+
200
+ ## 9. 示例:AI 驱动 weapp-vite screenshot 验收
201
+
202
+ 下面给一个简化版示例:只给 AI 一段提示词,让它通过 MCP 自动执行构建与截图验收。
203
+
204
+ 前置条件:
205
+
206
+ 1. 客户端已接入 `weapp-vite` MCP。
207
+ 2. 微信开发者工具已登录,并开启「设置 -> 安全设置 -> 服务端口」。
208
+
209
+ ### 9.1 可直接复制的提示词
210
+
211
+ ```text
212
+ 你现在连接的是 weapp-vite MCP。请帮我完成一次小程序截图验收:
213
+ 1. 先阅读 node_modules/weapp-vite/dist/docs/index.md 和 node_modules/weapp-vite/dist/docs/mcp.md,确认当前版本的本地说明。
214
+ 2. 构建 e2e-apps/auto-routes-define-app-json(platform=weapp)。
215
+ 3. 执行 weapp-vite screenshot,参数如下:
216
+ - project: e2e-apps/auto-routes-define-app-json/dist/build/mp-weixin
217
+ - page: pages/home/index
218
+ - output: .tmp/mcp-screenshot.png
219
+ - 使用 --json 返回结果
220
+ 4. 检查 .tmp/mcp-screenshot.png 是否存在:
221
+ - 存在输出 screenshot-ok
222
+ - 不存在输出 screenshot-missing
223
+ 5. 最后汇总:执行命令、关键输出、最终结论。
224
+ ```
225
+
226
+ ### 9.2 期望结果
227
+
228
+ 1. AI 输出 `screenshot-ok`。
229
+ 2. 工作区生成 `.tmp/mcp-screenshot.png`。
230
+ 3. AI 输出本次验收摘要(命令、关键日志、结论)。
@@ -0,0 +1,52 @@
1
+ # Project Structure
2
+
3
+ ## 常见目录
4
+
5
+ 典型 `weapp-vite` 项目通常包含这些内容:
6
+
7
+ - `vite.config.ts`
8
+ - `src/`
9
+ - `.weapp-vite/`
10
+ - `dist/`
11
+ - `project.config.json`
12
+ - `AGENTS.md`
13
+
14
+ ## 关键文件职责
15
+
16
+ ### `vite.config.ts`
17
+
18
+ `weapp-vite` 的主要配置入口。`weapp` 相关能力都从这里进入。
19
+
20
+ ### `src/`
21
+
22
+ 小程序源码根目录,通常通过 `weapp.srcRoot` 指定。
23
+
24
+ ### `.weapp-vite/`
25
+
26
+ 托管的 TypeScript 支持文件目录。它通常由 `weapp-vite prepare` 生成或更新。
27
+
28
+ 不要手写依赖它的生成内容并长期偏离工具输出。
29
+
30
+ ### `dist/`
31
+
32
+ 构建产物目录。微信小程序通常会输出到 `dist/build/mp-weixin` 或相近结构。
33
+
34
+ ### `AGENTS.md`
35
+
36
+ 脚手架生成项目中的 AI 工作流说明。AI 代理进入项目后应优先读取。
37
+
38
+ ## AI 处理项目时的顺序
39
+
40
+ 1. 读根目录 `AGENTS.md`
41
+ 2. 读 `node_modules/weapp-vite/dist/docs/index.md`
42
+ 3. 读 `vite.config.ts`
43
+ 4. 再进入 `src/` 与业务代码
44
+
45
+ ## 何时运行 `prepare`
46
+
47
+ 出现这些情况时优先执行 `weapp-vite prepare`:
48
+
49
+ - `.weapp-vite` 支持文件缺失
50
+ - 升级了 `weapp-vite`
51
+ - TypeScript / Volar 提示异常
52
+ - 工具提示要求重新生成支持文件
@@ -0,0 +1,62 @@
1
+ # Troubleshooting
2
+
3
+ ## `.weapp-vite` 支持文件缺失或过期
4
+
5
+ 现象:
6
+
7
+ - 终端提示支持文件缺失或已过期
8
+ - 类型提示异常
9
+ - Volar / TypeScript 行为不一致
10
+
11
+ 优先操作:
12
+
13
+ ```bash
14
+ weapp-vite prepare
15
+ ```
16
+
17
+ ## AI 截图失败
18
+
19
+ 优先检查:
20
+
21
+ 1. 微信开发者工具是否已登录
22
+ 2. 是否开启了「设置 -> 安全设置 -> 服务端口」
23
+ 3. `--project` 是否指向真实的小程序构建目录
24
+ 4. `--page` 是否为真实路由
25
+
26
+ 推荐命令:
27
+
28
+ ```bash
29
+ weapp-vite screenshot --project ./dist/build/mp-weixin --page pages/index/index --output .tmp/acceptance.png --json
30
+ ```
31
+
32
+ ## 终端里看不到小程序日志
33
+
34
+ 优先使用:
35
+
36
+ ```bash
37
+ weapp-vite ide logs --open
38
+ ```
39
+
40
+ 如果项目启用了 `weapp.forwardConsole.enabled = 'auto'`,AI 终端场景下 `dev --open` 也可能自动附加日志桥。
41
+
42
+ ## `.vue` 文件存在,但提示未安装 `wevu`
43
+
44
+ 这通常意味着项目启用了 Vue SFC,但依赖侧没有满足当前约束。
45
+
46
+ 优先确认:
47
+
48
+ 1. 是否真的在使用 `wevu`
49
+ 2. 当前项目依赖是否完整安装
50
+ 3. SFC 相关写法是否应该参考 [`vue-sfc.md`](./vue-sfc.md)
51
+
52
+ ## 下游验证与源码修改不一致
53
+
54
+ 如果你正在修改 `packages/weapp-vite/src/**`,而验证走的是 app/template/e2e 产物,优先怀疑 `dist` 产物陈旧。
55
+
56
+ 先重建:
57
+
58
+ ```bash
59
+ pnpm --filter weapp-vite build
60
+ ```
61
+
62
+ 再做下游验证。