戰(zhàn):tsdown 監(jiān)聽模式(Watch Mode)配置完全指南)
人工智能AI AgentMCP 服務(wù)工具調(diào)用GUI 自動(dòng)化語音數(shù)字人交互助手【免費(fèi)下載鏈接】airi 自托管、歸你擁有的 Grok 風(fēng)格 AI 伴侶與 waifu / 賽博生命靈魂容器目標(biāo)是接近 Neuro-sama 的高度支持實(shí)時(shí)語音聊天、Minecraft 和 Factorio 游玩支持 Web / macOS / Windows。項(xiàng)目地址https://gitcode.com/moeru-ai/airi點(diǎn)擊查看免費(fèi)下載tsdown 是 airi 倉庫中用于打包 TypeScript/JavaScript 庫的核心構(gòu)建工具其監(jiān)聽模式Watch Mode能夠在源碼變更時(shí)自動(dòng)重建產(chǎn)物顯著縮短庫開發(fā)的迭代反饋回路。本文以 tsdown 的 Watch Mode 官方參考文檔為主體結(jié)合 airi 倉庫中真實(shí)存在的tsdown.config.ts配置文件如 packages/core-agent/tsdown.config.ts、packages/i18n/tsdown.config.ts系統(tǒng)講解監(jiān)聽模式的 CLI 用法、配置項(xiàng)、高級(jí)模式與故障排查讀完即可在自己的庫開發(fā)流程中落地一套高效、可復(fù)制的熱重建工作流。一、Watch Mode 是什么Watch Mode 會(huì)持續(xù)監(jiān)控你的源文件并在文件發(fā)生變化時(shí)自動(dòng)觸發(fā)重新構(gòu)建從而把改代碼 → 手動(dòng)跑構(gòu)建 → 查看產(chǎn)物的多步流程壓縮為改代碼 → 自動(dòng)出產(chǎn)物一步。它面向的是開發(fā)階段而非生產(chǎn)發(fā)布監(jiān)聽期間每次構(gòu)建都是增量式的只重編發(fā)生變化的模塊鏈比全量構(gòu)建更快你可以把測(cè)試、啟動(dòng) dev server 等后續(xù)動(dòng)作掛在構(gòu)建成功之后onSuccess讓產(chǎn)物一變測(cè)試或本地服務(wù)立刻跟上它不要求你手動(dòng)反復(fù)執(zhí)行tsdown是 tsup 用戶遷移到 tsdown 后首選的開發(fā)替代方案。tsdown 基于 Rolldown 與 Oxc 構(gòu)建運(yùn)行時(shí)要求 Node.js 22.18.0 或更高僅構(gòu)建期但產(chǎn)物可以通過target選項(xiàng)降級(jí)到更低的 Node.js 版本不影響庫的運(yùn)行時(shí)兼容性。相關(guān)基礎(chǔ)說明可參考 tsdown SKILL 文檔 與 Getting Started 指南。二、基礎(chǔ)用法CLI 與配置文件2.1 CLI 啟動(dòng)# 監(jiān)聽所有項(xiàng)目文件 tsdown --watch # 或使用短標(biāo)志 tsdown -w # 監(jiān)聽指定目錄 tsdown --watch ./src # 監(jiān)聽指定文件 tsdown --watch ./src/index.ts--watch與-w完全等價(jià)--watch后面還可以跟一個(gè)可選的路徑參數(shù)用于把監(jiān)聽范圍收斂到某個(gè)目錄或單個(gè)入口文件參見 CLI Reference 中--watch, -w [path]一節(jié)。2.2 配置文件啟用export default defineConfig({ entry: [src/index.ts], watch: true, })設(shè)置watch: true后只要以tsdown啟動(dòng)無需額外加--watch便會(huì)進(jìn)入監(jiān)聽模式。CLI 標(biāo)志與配置文件的關(guān)系遵循CLI 覆蓋配置文件的優(yōu)先級(jí)規(guī)則--no-watch可以臨時(shí)關(guān)閉配置文件中的監(jiān)聽開關(guān)。三、Watch 選項(xiàng)詳解3.1 忽略路徑Ignore Paths某些文件如測(cè)試、fixtures、臨時(shí)文件的變動(dòng)不應(yīng)觸發(fā)重建可通過--ignore-watch排除tsdown --watch --ignore-watch test --ignore-watch **/*.test.ts配置文件中的等價(jià)寫法使用watch.excludeexport default defineConfig({ entry: [src/index.ts], watch: { exclude: [test/**, **/*.test.ts], }, })3.2 構(gòu)建成功后執(zhí)行命令On Success Command監(jiān)聽模式下最常見的需求是構(gòu)建完立刻做點(diǎn)什么——跑測(cè)試、啟動(dòng)服務(wù)、發(fā)通知# 構(gòu)建成功后打印提示 tsdown --watch --on-success echo Build complete! # 構(gòu)建成功后直接運(yùn)行產(chǎn)物 tsdown --watch --on-success node dist/index.mjsexport default defineConfig({ entry: [src/index.ts], watch: true, onSuccess: node dist/index.mjs, })onSuccess接收的是 shell 命令字符串僅在構(gòu)建成功時(shí)執(zhí)行構(gòu)建失敗時(shí)不會(huì)觸發(fā)方便你在出錯(cuò)時(shí)直接查看終端中的報(bào)錯(cuò)而非被后續(xù)命令掩蓋。更多用法見 On Success。四、Watch 行為機(jī)制4.1 默認(rèn)監(jiān)聽目標(biāo)默認(rèn)情況下 tsdown 監(jiān)聽三類內(nèi)容所有入口文件entry中聲明的文件所有被入口導(dǎo)入的文件import 鏈上的模塊配置文件本身如tsdown.config.ts變更時(shí)觸發(fā)重啟。這意味著監(jiān)聽范圍是跟隨模塊依賴圖動(dòng)態(tài)變化的新增一個(gè)被入口導(dǎo)入的文件它會(huì)自動(dòng)進(jìn)入監(jiān)聽范圍反之從依賴圖中移除的文件也會(huì)自動(dòng)退出監(jiān)聽無需手動(dòng)維護(hù)路徑列表。4.2 文件變更處理策略不同文件的變更觸發(fā)不同級(jí)別的處理變更對(duì)象處理方式源文件增量重建incremental rebuild配置文件完全重啟并清空緩存full restart with cache clear依賴dependencies若被入口導(dǎo)入則重建對(duì)應(yīng)模塊配置文件的變更之所以要完全重啟是因?yàn)榻馕雠渲煤缶彺媪巳肟?、格式、插件等關(guān)鍵決策熱替換容易引入不一致狀態(tài)直接重啟反而最可靠。4.3 鍵盤快捷鍵監(jiān)聽進(jìn)程存活期間可直接用鍵盤控制r—— 手動(dòng)觸發(fā)一次重建手動(dòng)重建q—— 退出監(jiān)聽模式。這兩個(gè)快捷鍵讓手動(dòng)控制構(gòu)建節(jié)奏無需另開終端配合onSuccess使用尤其順手。五、常見模式把 Watch 用出生產(chǎn)力5.1 開發(fā)模式一鍵切換利用defineConfig支持函數(shù)參數(shù)的特性可以基于options.watch一鍵在開發(fā)與生產(chǎn)兩套配置間切換export default defineConfig((options) ({ entry: [src/index.ts], format: [esm], watch: options.watch, sourcemap: options.watch, // 開發(fā)時(shí)生成 source map 便于調(diào)試 minify: !options.watch, // 生產(chǎn)時(shí)才壓縮 }))關(guān)于sourcemap的三種形態(tài)外置 / inline / hidden及與watch的搭配見 Sourcemap 文檔。5.2 構(gòu)建后自動(dòng)跑測(cè)試把測(cè)試作為onSuccess實(shí)現(xiàn)保存即測(cè)export default defineConfig({ entry: [src/index.ts], watch: true, onSuccess: npm run test, })5.3 多入口監(jiān)聽對(duì)象形式的entry同樣受支持多個(gè)入口各自產(chǎn)出獨(dú)立 bundleexport default defineConfig({ entry: { main: src/index.ts, cli: src/cli.ts, }, watch: true, clean: false, // 每次重建不清空輸出目錄 })clean: false在監(jiān)聽模式下的意義在于反復(fù)重建時(shí)避免反復(fù)清空/重寫整個(gè)輸出目錄加快增量構(gòu)建。完整的行為權(quán)衡見 Cleaning 文檔。5.4 與測(cè)試運(yùn)行器 / dev server 集成# 變更后自動(dòng)跑 vitest tsdown --watch --on-success vitest run # 變更后自動(dòng)重啟本地服務(wù) tsdown --watch --on-success node dist/server.mjsairi 倉庫中大量包都同時(shí)配備了 tsdown 與 vitest如 packages/core-agent、packages/provider-inference這一組合正是上述模式的典型應(yīng)用場(chǎng)景。5.5 Monorepo 包監(jiān)聽結(jié)合workspace支持一份配置即可監(jiān)聽多個(gè)子包export default defineConfig({ workspace: packages/*, entry: [src/index.ts], watch: { exclude: [**/test/**, **/*.spec.ts], }, })原文檔此處同時(shí)聲明了頂層watch: true與watch: { exclude }兩個(gè)同名鍵二者語義等價(jià)于開啟監(jiān)聽并排除測(cè)試路徑。在真實(shí)的 TypeScript 配置中請(qǐng)像上面這樣把exclude收斂進(jìn)watch對(duì)象里避免同名鍵覆蓋。airi 倉庫即采用 pnpm workspace tsdown 的 monorepo 布局見根目錄 package.json 與 pnpm-workspace.yaml倉庫內(nèi)共有 35 個(gè)tsdown.config.ts例如packages/plugin-sdk/tsdown.config.ts多入口 dts: trueformat: esmservices/computer-use-mcp/tsdown.config.ts多入口 target: node18clean: truedts: truepackages/audio/tsdown.config.ts對(duì)象入口 unbundle: trueexternalpackages/i18n/tsdown.config.ts對(duì)象入口 copyunbundle: true unplugin 插件。給這些包的開發(fā)流程加上--watch即可在改動(dòng)任一子包源碼后即時(shí)獲得增量產(chǎn)物。六、高級(jí)配置6.1 自定義 Watch 選項(xiàng)watch除了true/false還支持對(duì)象形式以精細(xì)化控制export default defineConfig({ entry: [src/index.ts], watch: { include: [src/**], // 額外納入監(jiān)聽的路徑 exclude: [**/*.test.ts, **/fixtures/**], // 忽略的 glob 路徑 skipWrite: false, // 是否跳過寫入產(chǎn)物 }, })include在默認(rèn)監(jiān)聽目標(biāo)入口 導(dǎo)入鏈 配置文件之上追加需要關(guān)注的目錄exclude從監(jiān)聽范圍中剔除的 glob 模式防止測(cè)試、fixtures 等無關(guān)變更觸發(fā)重建skipWrite控制重建后是否實(shí)際寫出產(chǎn)物文件對(duì)只想驗(yàn)證構(gòu)建不落盤的場(chǎng)景有用。6.2 條件式 WatchConditional Watch在函數(shù)式配置中按 watch 狀態(tài)裁剪能力讓同一份配置同時(shí)服務(wù)開發(fā)與發(fā)布export default defineConfig((options) { const isDev options.watch return { entry: [src/index.ts], format: [esm], dts: !isDev, // 監(jiān)聽模式下跳過 DTS 生成加快重建 sourcemap: isDev, clean: !isDev, } })這里的關(guān)鍵取舍dts類型聲明生成與minify壓縮都是重建耗時(shí)大戶開發(fā)期關(guān)閉、發(fā)布期開啟是讓 watch 保持秒級(jí)反饋的核心技巧。DTS 相關(guān)的isolatedDeclarations加速手段見 DTS 文檔。七、CLI 速查表# 基礎(chǔ)監(jiān)聽 tsdown -w # 監(jiān)聽 source map tsdown -w --sourcemap # 監(jiān)聽但不清理輸出目錄 tsdown -w --no-clean # 監(jiān)聽 構(gòu)建成功后執(zhí)行命令 tsdown -w --on-success npm test # 只監(jiān)聽指定格式 tsdown -w --format esm # 監(jiān)聽 壓縮 tsdown -w --minify # 監(jiān)聽 忽略測(cè)試文件 tsdown -w --ignore-watch **/*.test.ts八、使用建議活躍開發(fā)時(shí)始終開啟 watch mode讓產(chǎn)物時(shí)刻保持與源碼同步監(jiān)聽模式下跳過 DTS 生成dts: !options.watch重建速度顯著提升關(guān)閉clean避免每次重建做多余的文件系統(tǒng)操作善用onSuccess掛載測(cè)試、lint、重啟 dev server 等后置任務(wù)忽略測(cè)試文件exclude: [**/*.test.ts]防止無關(guān)變更觸發(fā)無效重建記住r/q快捷鍵需要時(shí)手動(dòng)重建或隨時(shí)退出監(jiān)聽。九、故障排查9.1 變更未被監(jiān)聽依次檢查文件是否位于entry或入口的 import 依賴鏈上默認(rèn)只監(jiān)聽這兩類 配置文件路徑是否命中了exclude或--ignore-watch的忽略模式文件系統(tǒng)是否支持監(jiān)聽網(wǎng)絡(luò)盤、部分容器/掛載卷可能不觸發(fā)事件。9.2 重建過于頻繁把明顯無關(guān)的路徑全部排除掉export default defineConfig({ watch: { exclude: [ **/node_modules/**, **/.git/**, **/dist/**, **/*.test.ts, ], }, })9.3 重建速度慢監(jiān)聽模式下跳過 DTSdts: !options.watch關(guān)閉壓縮minify: false開發(fā)期間收窄入口集合減少每次全量處理的模塊數(shù)。9.4 配置變更未生效配置文件一旦變更tsdown 會(huì)自動(dòng)觸發(fā)完全重啟并清空緩存因此不需要手動(dòng)干預(yù)。若感覺改動(dòng)沒生效請(qǐng)確認(rèn)改動(dòng)的是被自動(dòng)發(fā)現(xiàn)的配置文件本身配置文件查找規(guī)則而不是某個(gè)未被監(jiān)聽的引用文件。9.5 為什么不用 Stub Modetsdown不支持 stub mode。對(duì)于快速開發(fā)官方推薦以 watch mode 作為替代方案——它在沒有 stub mode 諸多弊端如類型解析不一致、產(chǎn)物與源碼脫節(jié)的前提下提供即時(shí)重建的體驗(yàn)。十、相關(guān)選項(xiàng)On Success —— 構(gòu)建成功后執(zhí)行命令Sourcemap —— 調(diào)試信息生成Clean —— 輸出目錄清理策略。完整 CLI 參考見 reference-cli.md技能總覽見 tsdown SKILL.md。結(jié)合 airi 倉庫中 35 個(gè)真實(shí)存在的tsdown.config.ts如 packages/plugin-sdk/tsdown.config.ts、services/computer-use-mcp/tsdown.config.ts你可以直接把本文的 watch 模式配置接入任意一個(gè)子包的開發(fā)腳本享受保存即重建、重建即驗(yàn)證的開發(fā)體驗(yàn)。贊分享人工智能AI AgentMCP 服務(wù)工具調(diào)用GUI 自動(dòng)化語音數(shù)字人交互助手【免費(fèi)下載鏈接】airi 自托管、歸你擁有的 Grok 風(fēng)格 AI 伴侶與 waifu / 賽博生命靈魂容器目標(biāo)是接近 Neuro-sama 的高度支持實(shí)時(shí)語音聊天、Minecraft 和 Factorio 游玩支持 Web / macOS / Windows。項(xiàng)目地址https://gitcode.com/moeru-ai/airi點(diǎn)擊查看免費(fèi)下載相關(guān)推薦Airi 多包倉庫實(shí)戰(zhàn)tsdown Source Maps 配置全解析Airi 多包倉庫實(shí)戰(zhàn)tsdown Source Maps 配置全解析 導(dǎo)讀 Source Maps源碼映射能把打包壓縮后的產(chǎn)物映射回原始 TypeSc人工智能AI 應(yīng)用大模型AI Agent交互助手語音數(shù)字人后端前端桌面應(yīng)用移動(dòng)開發(fā)GUI 自動(dòng)化MCP 服務(wù)AIRI 倉庫實(shí)戰(zhàn)tsdown 自動(dòng)生成 package.json exports 字段完全指南AIRI 倉庫實(shí)戰(zhàn)tsdown 自動(dòng)生成 package.json exports 字段完全指南 導(dǎo)讀 exports 字段是現(xiàn)代 Node.js 包導(dǎo)出映射人工智能AI AgentMCP 服務(wù)工具調(diào)用GUI 自動(dòng)化語音數(shù)字人交互助手后端tsdown minify 配置完全指南Airi 倉庫的代碼壓縮與 DCE-Only 實(shí)踐tsdown minify 配置完全指南Airi 倉庫的代碼壓縮與 DCE Only 實(shí)踐 本篇技術(shù)指南以 tsdown 的 minify 選項(xiàng)為主線完整講人工智能AI AgentMCP 服務(wù)工具調(diào)用GUI 自動(dòng)化語音數(shù)字人交互助手后端上一篇aliyunpan 排障速查指南登錄失敗、下載上傳與同步備份問題定位下一篇node-postgres增刪改查完全手冊(cè)參數(shù)化查詢與結(jié)果集處理徹底告別SQL注入創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考