weapp-vite 6.15.13 → 6.15.15

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 CHANGED
@@ -187,6 +187,16 @@ wv ide logs
187
187
  wv ide logs --open
188
188
  ```
189
189
 
190
+ 除了日志桥接,`ide` 子命令现在也支持直接读取已打开 DevTools 会话的信息:
191
+
192
+ ```sh
193
+ wv ide info
194
+ wv ide test-accounts
195
+ wv ide ticket
196
+ wv ide ticket:set --ticket your-ticket
197
+ wv ide ticket:refresh
198
+ ```
199
+
190
200
  ## DevTools 配置预热
191
201
 
192
202
  `weapp-vite` 在打开微信开发者工具前,会复用 `weapp-ide-cli` 的底层能力,自动尝试预热本机 DevTools 配置:
@@ -219,6 +229,36 @@ weapp-vite build --open
219
229
 
220
230
  都会沿用同一套默认策略。
221
231
 
232
+ ## Dev 开发快捷键
233
+
234
+ 当你使用 `weapp-vite dev --open` 启动微信开发者工具后,终端会自动进入开发快捷键模式,方便直接在当前会话里执行高频调试动作。
235
+
236
+ 当前默认快捷键:
237
+
238
+ - `h`:重新显示帮助
239
+ - `q`:退出当前 `dev`
240
+ - `s`:截图当前页面并保存到本地
241
+ - `r`:手动重新构建当前小程序产物
242
+ - `c`:重置当前 DevTools automator 会话
243
+ - `C`:重置会话并重开当前微信开发者工具项目
244
+ - `o`:重新打开当前微信开发者工具项目
245
+ - `m`:开关本地 MCP 服务
246
+ - `Ctrl+C`:强制中断当前 `dev`
247
+ - `Ctrl+Z`:临时挂起当前 `dev`,恢复终端控制
248
+
249
+ 执行动作时,终端会显示“执行中”状态和最近一次操作结果;如果当前已有热键动作在运行,会自动阻止并发执行,避免和开发者工具会话互相踩踏。
250
+
251
+ 常见组合示例:
252
+
253
+ ```sh
254
+ weapp-vite dev --open
255
+ # 启动后可直接在终端里按:
256
+ # r -> 手动重新构建
257
+ # c -> 重置当前 DevTools 会话
258
+ # C -> 重置会话并重开项目
259
+ # o -> 重新打开当前 DevTools 项目
260
+ ```
261
+
222
262
  ## CLI 中调用 weapp-ide-cli
223
263
 
224
264
  `weapp-vite` 内置了对 `weapp-ide-cli` 的透传能力,除了 `dev/build/open/init/generate/analyze/npm` 等原生命令外,其它 IDE 相关命令都可以直接调用:
package/bin/bootstrap.js CHANGED
@@ -6,6 +6,38 @@ function getGlobalProcess() {
6
6
  return Reflect.get(globalThis, 'process')
7
7
  }
8
8
 
9
+ function isKnownLocalPkgResolveNoise(args) {
10
+ const message = args
11
+ .map((value) => {
12
+ if (value instanceof Error) {
13
+ return `${value.message}\n${value.stack ?? ''}`
14
+ }
15
+ return String(value)
16
+ })
17
+ .join('\n')
18
+
19
+ return message.includes('ERR_INVALID_FILE_URL_HOST')
20
+ && (message.includes('local-pkg') || message.includes('mlly'))
21
+ }
22
+
23
+ export function guardKnownLocalPkgResolveNoise() {
24
+ // eslint-disable-next-line no-console -- CLI 启动阶段需要定向过滤已知三方解析噪音
25
+ const originalConsoleError = console.error
26
+
27
+ // eslint-disable-next-line no-console -- CLI 启动阶段需要定向过滤已知三方解析噪音
28
+ console.error = (...args) => {
29
+ if (isKnownLocalPkgResolveNoise(args)) {
30
+ return
31
+ }
32
+ originalConsoleError(...args)
33
+ }
34
+
35
+ return () => {
36
+ // eslint-disable-next-line no-console -- 恢复原始 console.error
37
+ console.error = originalConsoleError
38
+ }
39
+ }
40
+
9
41
  export function formatPrepareSkipMessage(error) {
10
42
  const message = error instanceof Error ? error.message : String(error)
11
43
  return `[prepare] 跳过 .weapp-vite 支持文件预生成:${message}`
@@ -77,6 +109,7 @@ export async function runWeappViteCLI(options = {}) {
77
109
  write = message => getGlobalProcess().stderr.write(`\n WARN ${message}\n\n`),
78
110
  } = options
79
111
  const restorePrepareGuard = guardPrepareProcessExit(argv)
112
+ const restoreKnownNoiseGuard = guardKnownLocalPkgResolveNoise()
80
113
 
81
114
  try {
82
115
  await importer()
@@ -90,6 +123,7 @@ export async function runWeappViteCLI(options = {}) {
90
123
  throw error
91
124
  }
92
125
  finally {
126
+ restoreKnownNoiseGuard()
93
127
  if (!isPrepareCommand(argv)) {
94
128
  restorePrepareGuard()
95
129
  }
@@ -1,7 +1,11 @@
1
- import { describe, expect, it, vi } from 'vitest'
2
- import { formatPrepareSkipMessage, guardPrepareProcessExit, runWeappViteCLI } from './bootstrap.js'
1
+ import { afterEach, describe, expect, it, vi } from 'vitest'
2
+ import { formatPrepareSkipMessage, guardKnownLocalPkgResolveNoise, guardPrepareProcessExit, runWeappViteCLI } from './bootstrap.js'
3
3
 
4
4
  describe('bin bootstrap', () => {
5
+ afterEach(() => {
6
+ vi.restoreAllMocks()
7
+ })
8
+
5
9
  it('guards process exit state for prepare at bin level', () => {
6
10
  process.exitCode = 1
7
11
  const restore = guardPrepareProcessExit(['prepare'])
@@ -60,4 +64,29 @@ describe('bin bootstrap', () => {
60
64
 
61
65
  expect(process.exitCode).toBe(0)
62
66
  })
67
+
68
+ it('suppresses known local-pkg resolve noise during bootstrap', () => {
69
+ const consoleErrorSpy = vi.fn()
70
+ // eslint-disable-next-line no-console -- 测试里需要替换 console.error
71
+ const originalConsoleError = console.error
72
+ // eslint-disable-next-line no-console -- 测试里需要观察过滤后的 console.error
73
+ console.error = consoleErrorSpy
74
+
75
+ const restore = guardKnownLocalPkgResolveNoise()
76
+ try {
77
+ // eslint-disable-next-line no-console -- 触发已知噪音分支
78
+ console.error(new Error('TypeError [ERR_INVALID_FILE_URL_HOST]: File URL host must be "localhost" or empty on darwin\n at _resolve (/tmp/local-pkg/dist/index.mjs:1:1)\n at resolveSync (/tmp/mlly/dist/index.mjs:1:1)'))
79
+ // eslint-disable-next-line no-console -- 触发普通错误透传分支
80
+ console.error(new Error('boom'))
81
+ }
82
+ finally {
83
+ restore()
84
+ // eslint-disable-next-line no-console -- 恢复测试前的 console.error
85
+ console.error = originalConsoleError
86
+ }
87
+
88
+ expect(consoleErrorSpy).toHaveBeenCalledTimes(1)
89
+ expect(consoleErrorSpy.mock.calls[0]?.[0]).toBeInstanceOf(Error)
90
+ expect(consoleErrorSpy.mock.calls[0]?.[0]?.message).toBe('boom')
91
+ })
63
92
  })
@@ -61,6 +61,7 @@ var tdesign_default = [
61
61
  "row",
62
62
  "scroll-view",
63
63
  "search",
64
+ "segmented",
64
65
  "side-bar",
65
66
  "side-bar-item",
66
67
  "skeleton",
@@ -76,6 +77,7 @@ var tdesign_default = [
76
77
  "tab-bar",
77
78
  "tab-bar-item",
78
79
  "tab-panel",
80
+ "table",
79
81
  "tabs",
80
82
  "tag",
81
83
  "textarea",
@@ -1,4 +1,4 @@
1
- import { i as getCompilerContext, u as getRouteRuntimeGlobalKeys } from "./createContext-CBnOZ_FN.mjs";
1
+ import { d as getRouteRuntimeGlobalKeys, i as getCompilerContext } from "./createContext-Bwdmz5ML.mjs";
2
2
  //#region src/auto-routes.ts
3
3
  const ROUTE_RUNTIME_OVERRIDE_KEY = Symbol.for("weapp-vite.route-runtime");
4
4
  function createGetter(resolver) {