<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>VSCode on Liangweidong's blog</title><link>https://liangweidonggood.github.io/tags/vscode/</link><description>Recent content in VSCode on Liangweidong's blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Mon, 15 Dec 2025 00:00:00 +0800</lastBuildDate><atom:link href="https://liangweidonggood.github.io/tags/vscode/index.xml" rel="self" type="application/rss+xml"/><item><title>Cursor 实战：AI-first IDE 的 5 大模式、Pro 订阅与插件生态全攻略</title><link>https://liangweidonggood.github.io/p/cursor-ai-ide-shi-zhan-2024/</link><pubDate>Mon, 15 Dec 2025 00:00:00 +0800</pubDate><guid>https://liangweidonggood.github.io/p/cursor-ai-ide-shi-zhan-2024/</guid><description>&lt;img src="https://liangweidonggood.github.io/p/cursor-ai-ide-shi-zhan-2024/image/cover.jpg" alt="Featured image of post Cursor 实战：AI-first IDE 的 5 大模式、Pro 订阅与插件生态全攻略" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;时间锚点&lt;/strong&gt;：2025-12——Cursor 1.x 时代，Composer 2 已成默认，GPT-5.3 / Claude Sonnet 4.6 / Opus 4.6 已是日用模型；与 2024-07-28《AI 行业趋势综述》配套阅读（那篇是 2024 视角，本文为 2025 视角）&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="2025-视角开篇"&gt;〇、2025 视角开篇
&lt;/h2&gt;&lt;p&gt;本文写于 &lt;strong&gt;2025-12-15&lt;/strong&gt;，站在 2025 年底回望：Cursor 已经从&amp;quot;AI-first IDE 新星&amp;quot;演化成&amp;quot;事实标准之一&amp;quot;——2024-09 那篇前瞻到 2025 年底大部分已被验证。文中提到的 GPT-5.3 Codex / Sonnet 4.6 / Opus 4.6 / Composer 2 均为 &lt;strong&gt;2025 年中后期已发布的模型&lt;/strong&gt;（不是&amp;quot;未来模型&amp;quot;），2024-09 时它们是&amp;quot;传闻 / 预览&amp;quot;，到 2025-12 已是&amp;quot;日常选项&amp;quot;。&lt;/p&gt;
&lt;h2 id="一为什么选择-cursor"&gt;一、为什么选择 Cursor
&lt;/h2&gt;&lt;p&gt;Cursor（&lt;a class="link" href="https://cursor.com" target="_blank" rel="noopener"
 &gt;Anysphere&lt;/a&gt;）是 2024 年现象级的 AI-first IDE，&lt;strong&gt;直接 fork VS Code 内核&lt;/strong&gt;，把所有 AI 能力内化为编辑器一等公民。2024-2025 年间 ARR 从 0 冲到 5 亿美元，被视为 SaaS 史上最快增长曲线之一。&lt;/p&gt;
&lt;p&gt;核心差异点（与传统 VS Code + Copilot 插件方案对比）：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;Cursor&lt;/th&gt;
					&lt;th&gt;VS Code + Copilot&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;架构&lt;/td&gt;
					&lt;td&gt;fork VS Code，AI 是内核一部分&lt;/td&gt;
					&lt;td&gt;插件机制，AI 是外挂&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Tab 补全&lt;/td&gt;
					&lt;td&gt;多行 + 上下文感知，跨文件&lt;/td&gt;
					&lt;td&gt;单行 / 多行，断网即停&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Agent 模式&lt;/td&gt;
					&lt;td&gt;原生 Agent + Plan + Debug&lt;/td&gt;
					&lt;td&gt;需通过插件 + MCP 间接调度&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;代码库理解&lt;/td&gt;
					&lt;td&gt;自动 embedding，存储在云端&lt;/td&gt;
					&lt;td&gt;无索引，每次需手动贴上下文&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;价格&lt;/td&gt;
					&lt;td&gt;Pro $20/月（含 API 额度）&lt;/td&gt;
					&lt;td&gt;Copilot $10/月（不含 API）&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;2025-12 更新&lt;/strong&gt;：Cursor Pro 价格仍为 $20/月（保持 2024 价位），Copilot 在 2025 年提过一次价（$10→$19/月含 API），但 2025-Q3 又调回 $10 单订阅 / $19 含 API 两种档位。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="二5-大核心模式"&gt;二、5 大核心模式
&lt;/h2&gt;&lt;p&gt;Cursor 把 AI 协作拆成 5 个独立模式，每个模式有不同的工作流：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;模式&lt;/th&gt;
					&lt;th&gt;触发方式&lt;/th&gt;
					&lt;th&gt;核心场景&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Agent&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Ctrl+I&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;端到端任务：修 Bug / 写功能 / 重构&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Plan&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Shift+Tab&lt;/code&gt; 切换&lt;/td&gt;
					&lt;td&gt;复杂任务先出方案再动手&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Debug&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;调试菜单&lt;/td&gt;
					&lt;td&gt;难复现问题，先假设后验证&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Ask&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Ctrl+L&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;问答 / 解释代码，不修改文件&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Composer&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;独立面板&lt;/td&gt;
					&lt;td&gt;跨文件大规模改写&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="21-agent-模式"&gt;2.1 Agent 模式
&lt;/h3&gt;&lt;p&gt;Agent 是 Cursor 的&amp;quot;主菜&amp;quot;，由三个组件协同：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Agent = Instructions（system prompt + 规则）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; + Tools（文件编辑 / 代码库搜索 / 终端执行 / MCP）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; + Model（Composer 2 / GPT-5.3 Codex / Claude Sonnet 4.6 / Opus 4.6）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;实战中 Agent 自动处理这些事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自动分析项目结构（&lt;code&gt;@src/&lt;/code&gt; 包含文件夹）&lt;/li&gt;
&lt;li&gt;自动跑 &lt;code&gt;npm test&lt;/code&gt; 验证&lt;/li&gt;
&lt;li&gt;自动应用 diff，让用户 &lt;code&gt;Ctrl+Y&lt;/code&gt; 接受&lt;/li&gt;
&lt;li&gt;自动 commit（可关闭）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="22-plan-模式"&gt;2.2 Plan 模式
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;复杂任务必须先开 Plan 模式&lt;/strong&gt;——Agent 会：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;分析当前代码库&lt;/li&gt;
&lt;li&gt;提出 2-3 个澄清问题（&amp;ldquo;用 JWT 还是 session？&amp;quot;）&lt;/li&gt;
&lt;li&gt;生成可审阅的实施计划&lt;/li&gt;
&lt;li&gt;等待用户确认后才动手&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;经验法则：修改超过 3 个文件的任务，先 Plan。&lt;/p&gt;
&lt;h3 id="23-debug-模式"&gt;2.3 Debug 模式
&lt;/h3&gt;&lt;p&gt;Debug 模式与传统 &lt;code&gt;console.log&lt;/code&gt; 调试的差异：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不会立即写代码，而是&lt;strong&gt;先提出假设&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;自动加日志语句&lt;/li&gt;
&lt;li&gt;利用运行时信息反推根因&lt;/li&gt;
&lt;li&gt;再做针对性修复&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;适合：偶发性 bug、性能毛刺、并发问题。&lt;/p&gt;
&lt;h3 id="24-ask-模式"&gt;2.4 Ask 模式
&lt;/h3&gt;&lt;p&gt;Ask 不修改任何文件，专用于：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;解释这段代码为什么这么写&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;这个函数的调用链是什么&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;对比 A 和 B 两种实现方案&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="三模型选择与-max-模式"&gt;三、模型选择与 MAX 模式
&lt;/h2&gt;&lt;p&gt;Cursor 提供 5 类模型，按&amp;quot;质量-成本&amp;quot;梯度排列：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;模型&lt;/th&gt;
					&lt;th&gt;上下文&lt;/th&gt;
					&lt;th&gt;定位&lt;/th&gt;
					&lt;th&gt;价格&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Composer 2 Fast&lt;/td&gt;
					&lt;td&gt;200k&lt;/td&gt;
					&lt;td&gt;Cursor 自研 agentic 模型&lt;/td&gt;
					&lt;td&gt;Pro 套餐含&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;GPT-5.3 Codex&lt;/td&gt;
					&lt;td&gt;272k（MAX 1M）&lt;/td&gt;
					&lt;td&gt;OpenAI 编码专精&lt;/td&gt;
					&lt;td&gt;Pro + API 额度&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;GPT-5.4&lt;/td&gt;
					&lt;td&gt;272k（MAX 1M）&lt;/td&gt;
					&lt;td&gt;OpenAI 综合旗舰&lt;/td&gt;
					&lt;td&gt;Pro + API 额度&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Sonnet 4.6&lt;/td&gt;
					&lt;td&gt;200k（MAX 1M）&lt;/td&gt;
					&lt;td&gt;Anthropic 日用&lt;/td&gt;
					&lt;td&gt;Pro + API 额度&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Opus 4.6&lt;/td&gt;
					&lt;td&gt;200k（MAX 1M）&lt;/td&gt;
					&lt;td&gt;Anthropic 顶级&lt;/td&gt;
					&lt;td&gt;Pro + API 额度&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;MAX 模式&lt;/strong&gt;会把上下文窗口撑到模型原生最大值（如 Sonnet 4.6 MAX = 1M），适合&amp;quot;整个代码库做大规模迁移&amp;quot;这类任务。但 MAX 按 token 计费，Pro 套餐会加收 20% 附加费。&lt;/p&gt;
&lt;p&gt;实战配比建议：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;日常 80%&lt;/strong&gt;：Composer 2 Fast（快、便宜、够用）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;中等复杂度&lt;/strong&gt;：Sonnet 4.6（性价比最优）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;大改动 / 难 Bug&lt;/strong&gt;：Opus 4.6（最强但慢）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;特定场景&lt;/strong&gt;：GPT-5.3 Codex（编码任务特化）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="四pro-20月套餐成本核算"&gt;四、Pro $20/月套餐成本核算
&lt;/h2&gt;&lt;p&gt;Pro 套餐结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Pro $20/月 = Auto 用量（Composer 2 + Auto 模式）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; + API 用量（其他模型，按 token 计费）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; + 至少 $20 API 额度
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;On-Demand 模式开启后，套餐额度用完按 API 费率继续扣费。&lt;strong&gt;月成本从 $20 到 $100+ 都有可能&lt;/strong&gt;，取决于你用 MAX 模式 / Opus 4.6 的频率。&lt;/p&gt;
&lt;p&gt;个人建议：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;默认 Auto 模式，把&amp;quot;难任务&amp;quot;显式指定模型&lt;/li&gt;
&lt;li&gt;关闭 On-Demand，避免月底天价账单&lt;/li&gt;
&lt;li&gt;大规模重构任务用本地 Worktree 模式（下面有）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="五代码运行环境local--worktree--cloud"&gt;五、代码运行环境：Local / Worktree / Cloud
&lt;/h2&gt;&lt;p&gt;Agent 执行代码有 3 个环境：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;环境&lt;/th&gt;
					&lt;th&gt;适用场景&lt;/th&gt;
					&lt;th&gt;优势&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Local&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;当前工作区直接改&lt;/td&gt;
					&lt;td&gt;最直接，但风险大&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Worktree&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Git worktree 隔离分支&lt;/td&gt;
					&lt;td&gt;主分支不受影响，可并行&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Cloud&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;云端代理&lt;/td&gt;
					&lt;td&gt;长任务 / 离开电脑时跑&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;关键习惯&lt;/strong&gt;：所有&amp;quot;会改超过 5 个文件&amp;quot;的任务都用 Worktree，结束后 &lt;code&gt;git merge&lt;/code&gt; 回主分支。&lt;/p&gt;
&lt;h2 id="六auto-run-与权限白名单"&gt;六、Auto-Run 与权限白名单
&lt;/h2&gt;&lt;p&gt;Agent 默认会在执行命令前询问，&lt;strong&gt;白名单机制可大幅减少打扰&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;commandAllowlist&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;npm test&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;npm run build&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;git status&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;git diff&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mcpAllowlist&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;filesystem:read_file&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;github:create_issue&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;fetchDomainAllowlist&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;*.npmjs.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;github.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;保护机制&lt;/strong&gt;（默认开启，建议全开）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;External-File Protection&lt;/code&gt;：禁止 Agent 写工作区外文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;File-Deletion Protection&lt;/code&gt;：禁止 Agent 自动删文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MCP Tools Protection&lt;/code&gt;：禁止 Agent 自动跑 MCP 工具&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Browser Protection&lt;/code&gt;：禁止 Agent 自动开浏览器&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="七规则rules系统"&gt;七、规则（Rules）系统
&lt;/h2&gt;&lt;p&gt;Cursor 的&amp;quot;规则&amp;quot;是 .cursor/rules/ 下的 Markdown 文件，按&amp;quot;全局 / 按文件路径 / 手动&amp;quot;三种粒度生效：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;# 用户编码规范与重构指南
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## 1. 交互与基础规范
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 中文优先：回答和注释用中文
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 代码颗粒度：超过 20 行考虑聚合或拆函数
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 避免深层嵌套，优先卫语句
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## 2. 重构
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 小步重构：每次只做一个改动，频繁提交
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 命名拒绝缩写（约定俗成的 i 除外）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 注释解释&amp;#34;为什么&amp;#34;而非&amp;#34;做什么&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;规则文件支持 YAML frontmatter 限定作用路径：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;src/api/**/*.ts&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;**/*.{ts,tsx}&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# API 开发规范&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &lt;span class="l"&gt;所有 API 端点必须包含输入验证&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &lt;span class="l"&gt;使用标准错误响应格式&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="八必备插件清单"&gt;八、必备插件清单
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;分类&lt;/th&gt;
					&lt;th&gt;插件&lt;/th&gt;
					&lt;th&gt;作用&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;界面&lt;/td&gt;
					&lt;td&gt;One Dark Pro&lt;/td&gt;
					&lt;td&gt;主题美化&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;界面&lt;/td&gt;
					&lt;td&gt;material-icon-theme&lt;/td&gt;
					&lt;td&gt;图标美化&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;界面&lt;/td&gt;
					&lt;td&gt;Chinese (Simplified)&lt;/td&gt;
					&lt;td&gt;汉化包&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;界面&lt;/td&gt;
					&lt;td&gt;GitLens&lt;/td&gt;
					&lt;td&gt;Git 信息强化&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;效率&lt;/td&gt;
					&lt;td&gt;IntelliJ IDEA Keybindings&lt;/td&gt;
					&lt;td&gt;习惯 IDEA 快捷键切换&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;质量&lt;/td&gt;
					&lt;td&gt;SonarQube for IDE&lt;/td&gt;
					&lt;td&gt;静态分析&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;前端&lt;/td&gt;
					&lt;td&gt;Vue (Official)&lt;/td&gt;
					&lt;td&gt;Vue 3 开发&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;前端&lt;/td&gt;
					&lt;td&gt;ES7+ React/Redux Snippets&lt;/td&gt;
					&lt;td&gt;React 片段&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;前端&lt;/td&gt;
					&lt;td&gt;auto-rename-tag&lt;/td&gt;
					&lt;td&gt;HTML 标签自动重命名&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;前端&lt;/td&gt;
					&lt;td&gt;eslint&lt;/td&gt;
					&lt;td&gt;JS/TS 代码风格&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Java&lt;/td&gt;
					&lt;td&gt;Language Support for Java (Red Hat)&lt;/td&gt;
					&lt;td&gt;Java 语法支持&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Java&lt;/td&gt;
					&lt;td&gt;Extension Pack for Java&lt;/td&gt;
					&lt;td&gt;Java 套件&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Java&lt;/td&gt;
					&lt;td&gt;Spring Boot Tools&lt;/td&gt;
					&lt;td&gt;Spring 工具&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Java&lt;/td&gt;
					&lt;td&gt;Maven for Java / Gradle for Java&lt;/td&gt;
					&lt;td&gt;构建工具&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Java&lt;/td&gt;
					&lt;td&gt;Test Runner for Java&lt;/td&gt;
					&lt;td&gt;JUnit 跑测&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Go&lt;/td&gt;
					&lt;td&gt;Go&lt;/td&gt;
					&lt;td&gt;Go 语言支持&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Rust&lt;/td&gt;
					&lt;td&gt;rust-analyzer&lt;/td&gt;
					&lt;td&gt;Rust 工具链&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Python&lt;/td&gt;
					&lt;td&gt;Python (ms-python)&lt;/td&gt;
					&lt;td&gt;Python 调试 / 虚拟环境&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;避坑&lt;/strong&gt;：Cursor 自带 AI 补全能力（Cursor Tab），与 Tabnine / GitHub Copilot 插件&lt;strong&gt;冲突&lt;/strong&gt;，装一个就好。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="九核心快捷键速查"&gt;九、核心快捷键速查
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;类别&lt;/th&gt;
					&lt;th&gt;操作&lt;/th&gt;
					&lt;th&gt;快捷键&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Agent&lt;/td&gt;
					&lt;td&gt;开启/关闭对话&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Ctrl+I&lt;/code&gt; / &lt;code&gt;Ctrl+L&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Agent&lt;/td&gt;
					&lt;td&gt;New Chat&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Ctrl+Shift+L&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Agent&lt;/td&gt;
					&lt;td&gt;切换 Agent&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Shift+Tab&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Agent&lt;/td&gt;
					&lt;td&gt;切换模型&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Ctrl+/&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Agent&lt;/td&gt;
					&lt;td&gt;接受变更跳下一处&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Ctrl+Y&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;开关&lt;/td&gt;
					&lt;td&gt;Hide Terminal&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Ctrl+J&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;开关&lt;/td&gt;
					&lt;td&gt;Search Files&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Ctrl+P&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;跳转&lt;/td&gt;
					&lt;td&gt;跳到接口实现&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Ctrl+Alt+B&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;跳转&lt;/td&gt;
					&lt;td&gt;跳到方法的接口&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Ctrl+U&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;编辑&lt;/td&gt;
					&lt;td&gt;上面插入行&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Ctrl+Shift+Enter&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;编辑&lt;/td&gt;
					&lt;td&gt;下面插入行&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Ctrl+Enter&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;编辑&lt;/td&gt;
					&lt;td&gt;删除整行&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Shift+Del&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;编辑&lt;/td&gt;
					&lt;td&gt;复制整行到下一行&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Alt+Shift+↓&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="十java-跳转配置提升-ide-体验"&gt;十、Java 跳转配置（提升 IDE 体验）
&lt;/h2&gt;&lt;p&gt;Cursor 继承自 VS Code，Java 跳转默认不完美。在 &lt;code&gt;settings.json&lt;/code&gt; 加：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;java.implementations&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;java.references&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;装 Red Hat 的 Java Language Support + Debugger for Java 插件后，跳转功能接近 IDEA 体验。&lt;/p&gt;
&lt;h2 id="十一网络要求"&gt;十一、网络要求
&lt;/h2&gt;&lt;p&gt;Cursor 是 SaaS，对网络环境敏感。必需域名（公司内网需加白名单）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;api2.cursor.sh API 请求
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;api3.cursor.sh Cursor Tab
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;api4.cursor.sh Cursor Tab 区域节点
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*.api5.cursor.sh Agent 请求
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;repo42.cursor.sh 代码库索引
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*.authentication.cursor.sh 鉴权
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;marketplace.cursorapi.com 扩展市场
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cursor-cdn.com 扩展市场 CDN
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;downloads.cursor.com 客户端更新
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;HTTP 兼容模式：默认 HTTP/2，企业代理环境若出现&amp;quot;流式响应被缓存&amp;quot;或&amp;quot;双向流不支持&amp;quot;等错误，可降级到 HTTP/1.1。&lt;/p&gt;
&lt;h2 id="十二订阅与计费陷阱"&gt;十二、订阅与计费陷阱
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;On-Demand&lt;/code&gt; 默认 Disabled——开启后套餐用完继续按 API 费扣，&lt;strong&gt;月底可能$100+&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;隐私选项 &lt;code&gt;Data Sharing Enabled&lt;/code&gt; 默认开启——你的代码、提示词会用于训练，&lt;strong&gt;生产代码建议关闭&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Commit Attribution&lt;/code&gt; 默认开启——Agent 生成的 commit 会标记 &amp;ldquo;Made with Cursor&amp;rdquo;，团队项目看公司文化决定&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Cursor Tab&lt;/code&gt; 默认开启——多行补全比 Copilot 激进很多，新用户可能觉得&amp;quot;太自动&amp;rdquo;，可在 &lt;code&gt;Settings &amp;gt; Cursor Tab&lt;/code&gt; 调灵敏度&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="十三总结"&gt;十三、总结
&lt;/h2&gt;&lt;p&gt;Cursor 把&amp;quot;AI 是 IDE 一等公民&amp;quot;这件事做对了，&lt;strong&gt;编辑器体验 + Tab 补全 + Agent 闭环&lt;/strong&gt;是它的护城河。但&lt;strong&gt;Pro $20 套餐只是个入门价&lt;/strong&gt;，真要 MAX 模式 + Opus 4.6 跑大任务，月账单 $100+ 是常态。&lt;/p&gt;
&lt;p&gt;实战建议：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;新项目直接用 Cursor 起步&lt;/strong&gt;，省去 30% 重复劳动&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Worktree 模式是默认习惯&lt;/strong&gt;，保护主分支&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;规则文件按团队规范沉淀&lt;/strong&gt;，复用率最高的&amp;quot;知识资产&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;On-Demand 默认关闭&lt;/strong&gt;，控制成本&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MAX 模式慎用&lt;/strong&gt;，留给大改动&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="十四20252026-模型升级与生态走向"&gt;十四、2025→2026 模型升级与生态走向
&lt;/h2&gt;&lt;p&gt;站在 2025-12 收尾，回望 2024-09 时点 Cursor 模型表里那些&amp;quot;还是预览/即将推出&amp;quot;的型号，&lt;strong&gt;到 2025 年底已全部 GA&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;模型&lt;/th&gt;
					&lt;th&gt;2024-09 时点&lt;/th&gt;
					&lt;th&gt;2025-12 时点&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Composer 2 / Composer 2 Fast&lt;/td&gt;
					&lt;td&gt;尚未推出&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;日用首选&lt;/strong&gt;（Cursor 自研 agentic 模型）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;GPT-5.3 Codex&lt;/td&gt;
					&lt;td&gt;预览&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;OpenAI 编码主力&lt;/strong&gt;（含 MAX 1M 选项）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;GPT-5.4&lt;/td&gt;
					&lt;td&gt;传闻&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;OpenAI 综合旗舰&lt;/strong&gt;（替代 GPT-4o/4.5 地位）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Sonnet 4.6&lt;/td&gt;
					&lt;td&gt;Sonnet 3.5 刚发布&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Anthropic 性价比最优&lt;/strong&gt;（替代 3.5/4.5 位置）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Opus 4.6&lt;/td&gt;
					&lt;td&gt;Opus 3 已发布&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Anthropic 顶级&lt;/strong&gt;（慢但最强）&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;2025 实战配比建议&lt;/strong&gt;（相对 2024-09 原文&amp;quot;日常 80% Composer 2 Fast、中等 Sonnet 4.6、难 Bug Opus 4.6&amp;quot;基本一致）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;日常 80%&lt;/strong&gt;：Composer 2 Fast（快、便宜、够用）—— 2025 年自研模型成熟后这个比例更稳&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;中等复杂度&lt;/strong&gt;：Sonnet 4.6（性价比最优）—— 与 2024-09 判断一致&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;大改动 / 难 Bug&lt;/strong&gt;：Opus 4.6（最强但慢）—— 与 2024-09 判断一致&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;特定场景&lt;/strong&gt;：GPT-5.3 Codex（编码任务特化）—— 2025 年 OpenAI 编码模型已能跟 Sonnet 4.6 掰手腕&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2026 展望&lt;/strong&gt;（仅供参考，不属于&amp;quot;2025 已验证&amp;quot;内容）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cursor 可能跟进&amp;quot;按席位 + 按用量&amp;quot;双轨计费，避免 On-Demand 的天价账单争议&lt;/li&gt;
&lt;li&gt;Composer 3 可能在 2026 年发布，进一步压缩对外部模型（GPT-5.3 / Sonnet 4.6）的依赖&lt;/li&gt;
&lt;li&gt;AI IDE&amp;quot;五强格局&amp;quot;（Cursor / Trae / Claude Code / Copilot / Windsurf）短期不会破&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;下一步&lt;/strong&gt;：可参考 &lt;a class="link" href="https://liangweidonggood.github.io/p/ai-ide-pingce-2025/" &gt;2025-06-15《AI IDE 横评》&lt;/a&gt; 看 Cursor / Trae / Claude Code / Copilot 五款主流工具的横向对比；&lt;a class="link" href="https://liangweidonggood.github.io/p/trae-quan-gong-lve-2024/" &gt;2024-12-15《Trae 全攻略》&lt;/a&gt; 了解字节系 AI IDE 的差异化打法。&lt;/p&gt;

 &lt;/blockquote&gt;</description></item><item><title>VSCode HTML 开发速查与 Deno 入门</title><link>https://liangweidonggood.github.io/p/vscode-html-deno-quickstart/</link><pubDate>Tue, 15 May 2018 00:00:00 +0800</pubDate><guid>https://liangweidonggood.github.io/p/vscode-html-deno-quickstart/</guid><description>&lt;img src="https://liangweidonggood.github.io/p/vscode-html-deno-quickstart/image/cover.jpg" alt="Featured image of post VSCode HTML 开发速查与 Deno 入门" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;为什么写这篇&lt;/strong&gt;：2018 年 VSCode 已经超越 Sublime 成为前端编辑器霸主，Emmet 缩写让写 HTML 像写&amp;quot;补全指令&amp;quot;一样快。同年 Node.js 作者 Ryan Dahl 公开了 Deno——&amp;ldquo;一种更安全、更现代的 JS/TS 运行时&amp;rdquo;。本文是这两件事的速查手册。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;适用读者&lt;/strong&gt;：刚开始用 VSCode 写 HTML 的同学；对 Deno 好奇但没动手的 Node 开发者。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;前置知识&lt;/strong&gt;：会装 VSCode 扩展；知道 Node.js 是什么。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="目录"&gt;目录
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;a class="link" href="#1-vscode-%e5%86%99-html-%e7%9a%84-5-%e4%b8%aa%e9%ab%98%e6%95%88%e5%bf%ab%e6%8d%b7%e9%94%ae" &gt;VSCode 写 HTML 的 5 个高效快捷键&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#2-html5-%e9%aa%a8%e6%9e%b6%e8%a1%a5%e5%85%a8%e5%8e%9f%e7%90%86" &gt;HTML5 骨架补全原理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#3-vscode-%e5%bf%85%e8%a3%85%e5%89%8d%e7%ab%af%e6%89%a9%e5%b1%95" &gt;VSCode 必装前端扩展&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#4-deno-%e6%98%af%e4%bb%80%e4%b9%88" &gt;Deno 是什么&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#5-deno-%e5%ae%89%e8%a3%85%e4%b8%8e-repl" &gt;Deno 安装与 REPL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#6-deno-%e7%9a%84-typescript-%e5%8e%9f%e7%94%9f%e6%94%af%e6%8c%81" &gt;Deno 的 TypeScript 原生支持&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#7-deno-vs-node6-%e5%a4%a7%e5%b7%ae%e5%bc%82" &gt;Deno vs Node：6 大差异&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#8-deno-%e7%9a%84%e5%ae%89%e5%85%a8%e6%b2%99%e7%ae%b1" &gt;Deno 的安全沙箱&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#9-%e7%a4%ba%e4%be%8b%e5%86%99%e4%b8%80%e4%b8%aa-deno-http-server" &gt;示例：写一个 Deno HTTP Server&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="1-vscode-写-html-的-5-个高效快捷键"&gt;1. VSCode 写 HTML 的 5 个高效快捷键
&lt;/h2&gt;&lt;p&gt;VSCode 内置 &lt;strong&gt;Emmet&lt;/strong&gt;——&lt;code&gt;Tab&lt;/code&gt; 键触发缩写 → 展开为代码片段。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;快捷输入&lt;/th&gt;
					&lt;th&gt;展开为&lt;/th&gt;
					&lt;th&gt;用途&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;!&lt;/code&gt; + &lt;code&gt;Tab&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;HTML5 完整骨架&lt;/td&gt;
					&lt;td&gt;新建 HTML 文件第一行&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;html:5&lt;/code&gt; + &lt;code&gt;Tab&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;同上&lt;/td&gt;
					&lt;td&gt;等价于 &lt;code&gt;!&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;div*5&lt;/code&gt; + &lt;code&gt;Tab&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;5 个 div&lt;/td&gt;
					&lt;td&gt;批量创建同元素&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ul&amp;gt;li*3&lt;/code&gt; + &lt;code&gt;Tab&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;ul 包 3 个 li&lt;/td&gt;
					&lt;td&gt;嵌套批量&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;div.classname&lt;/code&gt; + &lt;code&gt;Tab&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;lt;div class=&amp;quot;classname&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;带 class 的元素&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Why &lt;code&gt;!&lt;/code&gt; 工作&lt;/strong&gt;：VSCode 把 &lt;code&gt;!&lt;/code&gt; 映射到 &lt;code&gt;html5.json&lt;/code&gt; 这个 Emmet snippet 文件——触发后插入 DOCTYPE、html、head、body 全部标签。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="na"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;en&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;UTF-8&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;viewport&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;width=device-width, initial-scale=1.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Document&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="11-常用-emmet-缩写速记"&gt;1.1 常用 Emmet 缩写速记
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;元素名 → &amp;lt;元素名&amp;gt;&amp;lt;/元素名&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;元素#id → &amp;lt;元素 id=&amp;#34;id&amp;#34;&amp;gt;&amp;lt;/元素&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;元素.class → &amp;lt;元素 class=&amp;#34;class&amp;#34;&amp;gt;&amp;lt;/元素&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;元素[attr=val] → &amp;lt;元素 attr=&amp;#34;val&amp;#34;&amp;gt;&amp;lt;/元素&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;元素{文字} → &amp;lt;元素&amp;gt;文字&amp;lt;/元素&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;元素*数量 → 重复 N 次
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;父&amp;gt;子 → 嵌套
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;兄+弟 → 平级
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;()(群组) → 分组
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;实际案例：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.container&amp;gt;ul.list&amp;gt;li.item*5&amp;gt;a[href=&amp;#34;#&amp;#34;]{链接$}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;展开：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;list&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;item&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;链接1&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;item&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;链接2&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;item&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;链接3&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;item&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;链接4&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;item&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;链接5&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="2-html5-骨架补全原理"&gt;2. HTML5 骨架补全原理
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;!&lt;/code&gt; 触发的是 VSCode 内置的 HTML language server + Emmet engine：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;输入 &lt;code&gt;!&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;编辑器提示候选&lt;/li&gt;
&lt;li&gt;按 &lt;code&gt;Tab&lt;/code&gt; 接受&lt;/li&gt;
&lt;li&gt;Emmet 把 &lt;code&gt;!&lt;/code&gt; 解析为 HTML5 模板，插入到光标位置&lt;/li&gt;
&lt;/ol&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;小贴士&lt;/strong&gt;：可以在 &lt;code&gt;文件 → 首选项 → 用户代码片段 → html.json&lt;/code&gt; 自定义模板，比如默认加 &lt;code&gt;&amp;lt;meta name=&amp;quot;author&amp;quot;&amp;gt;&lt;/code&gt;、改 lang=&amp;ldquo;zh-CN&amp;rdquo; 等。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;html:zh&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;prefix&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;!zh&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;body&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;!DOCTYPE html&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;html lang=\&amp;#34;zh-CN\&amp;#34;&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;head&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34; &amp;lt;meta charset=\&amp;#34;UTF-8\&amp;#34;&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34; &amp;lt;meta name=\&amp;#34;viewport\&amp;#34; content=\&amp;#34;width=device-width, initial-scale=1.0\&amp;#34;&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34; &amp;lt;title&amp;gt;${1:文档标题}&amp;lt;/title&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;/head&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;body&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34; $0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;/body&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;/html&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="3-vscode-必装前端扩展"&gt;3. VSCode 必装前端扩展
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;类别&lt;/th&gt;
					&lt;th&gt;扩展&lt;/th&gt;
					&lt;th&gt;用途&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;核心&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;ESLint&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;代码检查（与项目内 &lt;code&gt;.eslintrc&lt;/code&gt; 联动）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Prettier&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;自动格式化&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;EditorConfig for VS Code&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;跨编辑器代码风格（缩进/EOL）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;HTML/CSS&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Live Server&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;一键起本地 HTTP 服务器，文件改动自动刷新&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Auto Rename Tag&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;改开始标签自动改结束标签&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;CSS Peek&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;从 HTML 跳到 CSS 定义&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;JS/TS&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;JavaScript (ES6) code snippets&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;ES6 代码片段&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;TypeScript Vue Plugin (Volar)&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Vue 3 + TS 类型提示&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;框架&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Volar&lt;/strong&gt;（Vue） / &lt;strong&gt;ES7+ React/Redux/React-Native snippets&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;框架支持&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Git&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;GitLens&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;行内 blame、commit 历史&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;工具&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Path Intellisense&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;路径自动补全&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;TODO Highlight&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;高亮 TODO / FIXME&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;REST Client&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;像 Postman 一样在 VSCode 里发 HTTP&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;vscode-icons&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;文件夹/文件图标美化&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;轻量原则&lt;/strong&gt;：扩展装得越多，VSCode 启动越慢。&lt;strong&gt;禁用不需要的&lt;/strong&gt;——右键扩展 → &amp;ldquo;Disable (Workspace)&amp;rdquo; 或 &amp;ldquo;Disable Globally&amp;rdquo;。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="4-deno-是什么"&gt;4. Deno 是什么
&lt;/h2&gt;
 &lt;blockquote&gt;
 &lt;p&gt;Deno = &amp;ldquo;&lt;strong&gt;D&lt;/strong&gt;estroy &lt;strong&gt;No&lt;/strong&gt;de&amp;rdquo;——Node.js 作者 Ryan Dahl 在 2018 JSConf EU 演讲中亲口承认 Node.js 的设计缺陷（安全性、模块系统、构建工具链），宣布要&amp;quot;从头再来&amp;quot;，于是有了 Deno。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;Deno 是一个&lt;strong&gt;安全的 JavaScript / TypeScript 运行时&lt;/strong&gt;，基于 V8 引擎 + Rust + Tokio 异步运行时。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Node.js = V8 + libuv + C++ (2009)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Deno = V8 + Rust + Tokio (2018, 1.0 是 2020-05)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;核心目标：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;默认安全&lt;/strong&gt;：沙箱、权限系统，没有 &lt;code&gt;--allow-net&lt;/code&gt; 就不准联网&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TypeScript 原生&lt;/strong&gt;：不用配 &lt;code&gt;tsconfig&lt;/code&gt;，不用装 &lt;code&gt;ts-node&lt;/code&gt;，直接 &lt;code&gt;deno run app.ts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;标准模块&lt;/strong&gt;走 URL：&lt;code&gt;import { serve } from &amp;quot;https://deno.land/std/http/server.ts&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内置工具&lt;/strong&gt;：&lt;code&gt;deno fmt&lt;/code&gt; 格式化、&lt;code&gt;deno lint&lt;/code&gt; 检查、&lt;code&gt;deno test&lt;/code&gt; 测试、&lt;code&gt;deno bundle&lt;/code&gt; 打包&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;单可执行文件&lt;/strong&gt;：能编译成单一 binary 部署&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="5-deno-安装与-repl"&gt;5. Deno 安装与 REPL
&lt;/h2&gt;&lt;h3 id="51-安装"&gt;5.1 安装
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Windows PowerShell&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;iwr &lt;/span&gt;&lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="p"&gt;//&lt;/span&gt;&lt;span class="n"&gt;deno&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;land&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;ps1&lt;/span&gt; &lt;span class="n"&gt;-useb&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;iex
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# macOS / Linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;curl &lt;/span&gt;&lt;span class="n"&gt;-fsSL&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="p"&gt;//&lt;/span&gt;&lt;span class="n"&gt;deno&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;land&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;sh&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;输出：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Deno was installed successfully to C:\Users\&amp;lt;user&amp;gt;\.deno\bin\deno.exe
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Run &amp;#39;deno --help&amp;#39; to get started
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="52-升级"&gt;5.2 升级
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deno upgrade
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deno upgrade --version 1.45.0 &lt;span class="c1"&gt;# 指定版本&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="53-repl-与执行"&gt;5.3 REPL 与执行
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ deno
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 进入交互式 REPL（类似 node）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; console.log&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="m"&gt;30933&lt;/span&gt; + 404&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;31337&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; const &lt;span class="nv"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Deno&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; &lt;span class="sb"&gt;`&lt;/span&gt;Hello, &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;!&lt;span class="sb"&gt;`&lt;/span&gt; // 模板字符串支持
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;&amp;#39;Hello, Deno!&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="54-执行脚本"&gt;5.4 执行脚本
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// helloworld.ts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Hello, Deno!&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ deno run helloworld.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Compile file:///D:/workspace/project/frontend/deno/helloworld.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Hello, Deno!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：第一次跑会&amp;quot;Compile&amp;quot;——Deno 把 TS 编译成 JS 缓存到 &lt;code&gt;~/.cache/deno/&lt;/code&gt;。第二次直接跑，无延迟。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="55-一行执行远程脚本"&gt;5.5 一行执行远程脚本
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deno run https://deno.land/std/examples/welcome.ts
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="6-deno-的-typescript-原生支持"&gt;6. Deno 的 TypeScript 原生支持
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// app.ts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;name&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;age&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;u&lt;/span&gt;: &lt;span class="kt"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;张三&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt;: &lt;span class="kt"&gt;20&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sb"&gt;`Hello, &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;!`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ deno run app.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Hello, 张三!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Why TS 一行就跑&lt;/strong&gt;：Deno 内部用 &lt;code&gt;swc&lt;/code&gt; 编译器把 TS 转成 JS，再喂给 V8 引擎。整个过程用户无感知——不用 &lt;code&gt;tsc&lt;/code&gt; 编译、也不用 &lt;code&gt;ts-node&lt;/code&gt;。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="61-tsconfig-不必写"&gt;6.1 tsconfig 不必写
&lt;/h3&gt;&lt;p&gt;Deno 内置一套默认 TS 配置。如果要改：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;compilerOptions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;lib&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;deno.window&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;strict&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;或在 &lt;code&gt;deno.json&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;compilerOptions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;jsx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;react-jsx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;jsxImportSource&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;preact&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="7-deno-vs-node6-大差异"&gt;7. Deno vs Node：6 大差异
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;Node.js&lt;/th&gt;
					&lt;th&gt;Deno&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;包管理&lt;/td&gt;
					&lt;td&gt;npm / yarn / pnpm + node_modules&lt;/td&gt;
					&lt;td&gt;无（直接 &lt;code&gt;import url&lt;/code&gt;）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;TS 支持&lt;/td&gt;
					&lt;td&gt;需要 ts-node / tsx / esbuild&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;原生&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;安全&lt;/td&gt;
					&lt;td&gt;默认有全部权限&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;默认零权限&lt;/strong&gt;，按需 &lt;code&gt;--allow-*&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;模块系统&lt;/td&gt;
					&lt;td&gt;CommonJS / ESM 双轨混乱&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;纯 ESM&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;标准库&lt;/td&gt;
					&lt;td&gt;没有官方 std（只有第三方）&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;deno.land/std&lt;/code&gt; 官方维护&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;工具链&lt;/td&gt;
					&lt;td&gt;各种 npm 包&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;内置&lt;/strong&gt;（fmt / lint / test / bundle / doc / info）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;部署&lt;/td&gt;
					&lt;td&gt;node + npm install + PM2&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;deno compile&lt;/code&gt; 单文件可执行&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Why Deno 适合&amp;quot;快速脚本 + 安全执行&amp;quot;&lt;/strong&gt;：在 CI 中跑第三方代码（如用户提交的函数计算）时，Deno 的沙箱比 Node + vm2 安全得多。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="8-deno-的安全沙箱"&gt;8. Deno 的安全沙箱
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 默认拒绝所有 I/O&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deno run app.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# error: Uncaught PermissionDenied: read access to &amp;#34;./data.json&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 显式授权&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deno run --allow-read&lt;span class="o"&gt;=&lt;/span&gt;./data.json app.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 细粒度授权&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deno run --allow-net&lt;span class="o"&gt;=&lt;/span&gt;api.example.com --allow-read&lt;span class="o"&gt;=&lt;/span&gt;/tmp --allow-env&lt;span class="o"&gt;=&lt;/span&gt;API_KEY app.ts
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;权限 flag&lt;/th&gt;
					&lt;th&gt;作用&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--allow-read=[path]&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;读文件&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--allow-write=[path]&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;写文件&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--allow-net=[host]&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;网络访问&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--allow-env=[var]&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;读环境变量&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--allow-run=[cmd]&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;执行子进程&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--allow-all&lt;/code&gt;（&lt;code&gt;-A&lt;/code&gt;）&lt;/td&gt;
					&lt;td&gt;全部权限（&lt;strong&gt;慎用&lt;/strong&gt;）&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;设计哲学&lt;/strong&gt;：Node 的 &lt;code&gt;fs.readFile()&lt;/code&gt; 默认就能读任何文件——一旦代码被注入就完了。Deno 默认&amp;quot;什么都干不了&amp;quot;，按需授权——最小权限原则。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="9-示例写一个-deno-http-server"&gt;9. 示例：写一个 Deno HTTP Server
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// server.ts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;serve&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://deno.land/std@0.224.0/http/server.ts&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;: &lt;span class="kt"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathname&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Hello, Deno!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;content-type&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;text/plain; charset=utf-8&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathname&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Deno&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;version&lt;/span&gt;: &lt;span class="kt"&gt;Deno.version&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Not Found&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;: &lt;span class="kt"&gt;404&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Listening on http://localhost:8000&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;serve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt;: &lt;span class="kt"&gt;8000&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ deno run --allow-net server.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Listening on http://localhost:8000
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;测试：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ curl http://localhost:8000/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Hello, Deno!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ curl http://localhost:8000/json
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;:&lt;span class="s2"&gt;&amp;#34;Deno&amp;#34;&lt;/span&gt;,&lt;span class="s2"&gt;&amp;#34;version&amp;#34;&lt;/span&gt;:&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;deno&amp;#34;&lt;/span&gt;:&lt;span class="s2"&gt;&amp;#34;1.45.0&amp;#34;&lt;/span&gt;,&lt;span class="s2"&gt;&amp;#34;v8&amp;#34;&lt;/span&gt;:&lt;span class="s2"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;,&lt;span class="s2"&gt;&amp;#34;typescript&amp;#34;&lt;/span&gt;:&lt;span class="s2"&gt;&amp;#34;5.5.0&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;关键点&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;import&lt;/code&gt; 直接走 URL（&lt;code&gt;https://deno.land/std/...&lt;/code&gt;）——没有 npm install&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Deno.version&lt;/code&gt; 内置变量&lt;/li&gt;
&lt;li&gt;用 &lt;code&gt;Response.json()&lt;/code&gt; 返回 JSON&lt;/li&gt;
&lt;li&gt;必须 &lt;code&gt;--allow-net&lt;/code&gt;，否则起不来&lt;/li&gt;
&lt;/ol&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="95-deno-编译为单文件可执行"&gt;9.5 Deno 编译为单文件可执行
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deno compile --allow-net server.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# → server.exe (Windows) / server (Linux/Mac)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;部署到生产环境时，直接拷这一个 binary 就行——不用装 Node、npm、Deno runtime。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="小结"&gt;小结
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VSCode + Emmet&lt;/strong&gt;：写 HTML 不超过 5 个键，效率比手敲高 10 倍&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VSCode 扩展&lt;/strong&gt;：选&amp;quot;必要 + 强相关&amp;quot;，别装几百个扩展拖慢启动&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deno&lt;/strong&gt;：安全 + TS 原生 + 无 node_modules 的现代运行时&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deno 适用场景&lt;/strong&gt;：CLI 工具、Serverless 函数、Edge Runtime、用户脚本执行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deno 不适合&lt;/strong&gt;：需要大量 npm 包的传统后端（生态仍小）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://code.visualstudio.com/docs/editor/emmet" target="_blank" rel="noopener"
 &gt;VSCode Emmet 官方文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://juejin.cn/post/7230148815301197880" target="_blank" rel="noopener"
 &gt;VSCode 必装扩展推荐（2025 版）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://deno.land/manual" target="_blank" rel="noopener"
 &gt;Deno 官方文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.youtube.com/watch?v=M3BM9TB-8yA" target="_blank" rel="noopener"
 &gt;Ryan Dahl: 10 Things I Regret About Node.js（JSConf EU 2018 演讲）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://deno.com/blog/announcing-deno-2" target="_blank" rel="noopener"
 &gt;Deno vs Node 性能对比&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>设计建模工具实战：Axure / PowerDesigner / VSCode 全攻略</title><link>https://liangweidonggood.github.io/p/windows-she-ji-mo-xing-gong-ju/</link><pubDate>Wed, 15 Oct 2014 00:00:00 +0800</pubDate><guid>https://liangweidonggood.github.io/p/windows-she-ji-mo-xing-gong-ju/</guid><description>&lt;img src="https://liangweidonggood.github.io/p/windows-she-ji-mo-xing-gong-ju/image/cover.jpg" alt="Featured image of post 设计建模工具实战：Axure / PowerDesigner / VSCode 全攻略" /&gt;&lt;h2 id="一windows-设计与建模工具全景"&gt;一、Windows 设计与建模工具全景
&lt;/h2&gt;&lt;p&gt;2014 年的 Windows 设计与开发工具链呈&amp;quot;专业分工&amp;quot;格局——&lt;strong&gt;没有一款 IDE 能通吃所有场景&lt;/strong&gt;。本文整理：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Axure RP&lt;/strong&gt; —— 交互原型&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PowerDesigner&lt;/strong&gt; —— 数据库建模&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VSCode&lt;/strong&gt; —— 轻量代码编辑器&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trae&lt;/strong&gt; —— AI 辅助编程&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notepad++&lt;/strong&gt; —— 文本编辑瑞士军刀&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Android Studio&lt;/strong&gt; —— 移动开发&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这套组合至今仍是&amp;quot;前端 + 后端 + 数据 + 移动&amp;quot;团队的标配。&lt;/p&gt;
&lt;h2 id="二axure-rp交互原型的事实标准"&gt;二、Axure RP：交互原型的事实标准
&lt;/h2&gt;&lt;h3 id="21-定位"&gt;2.1 定位
&lt;/h3&gt;&lt;p&gt;Axure RP（Rapid Prototyping）2003 年起源，&lt;strong&gt;是产品经理 + UX 设计师的&amp;quot;画图工具&amp;quot;&lt;/strong&gt;。2014 年 Axure 7 已成熟，2017 年 Axure 8 加了 Team Project。&lt;/p&gt;
&lt;h3 id="22-安装"&gt;2.2 安装
&lt;/h3&gt;&lt;p&gt;官方 &lt;code&gt;https://www.axure.com/&lt;/code&gt;。&lt;strong&gt;Windows 版 + Mac 版&lt;/strong&gt;。安装时注意：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;64 位系统&lt;/strong&gt; 装 64 位（默认）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;首次启动&lt;/strong&gt; 要登录 Axure 账户激活&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;字体&lt;/strong&gt; 选 &lt;code&gt;Microsoft YaHei&lt;/code&gt; / &lt;code&gt;思源黑体&lt;/code&gt;（&lt;strong&gt;比系统默认宋体好看 10 倍&lt;/strong&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="23-核心功能"&gt;2.3 核心功能
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;页面与母版（Master）&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;页面：每个独立屏&lt;/li&gt;
&lt;li&gt;母版：复用元素（导航栏/页脚）&lt;/li&gt;
&lt;li&gt;母版拖到页面就是占位，&lt;strong&gt;双击进入母版修改会全站联动&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;交互面板（Interactions）&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;用例 1：登录失败弹窗
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 触发：点击登录按钮
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 条件：用户名 == &amp;#34;&amp;#34; OR 密码 == &amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 动作：显示 Toast → 红色文字 &amp;#34;请输入用户名密码&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 动作：聚焦到第一个空输入框
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;动态面板（Dynamic Panel）&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;状态 A：未登录（头像占位 + 登录按钮）&lt;/li&gt;
&lt;li&gt;状态 B：已登录（用户头像 + 退出按钮）&lt;/li&gt;
&lt;li&gt;状态切换：交互中 &lt;code&gt;Set Panel state to B&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="24-团队协作"&gt;2.4 团队协作
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Axure Share：上传 RP 文件到云 → 团队成员在线查看&lt;/li&gt;
&lt;li&gt;链接预览：&lt;code&gt;https://share.axure.com/XXXXX&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;导出 HTML 包&lt;/strong&gt;：菜单 &lt;code&gt;Publish → Generate HTML Files&lt;/code&gt;，&lt;strong&gt;双击 index.html 离线预览&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="25-与现代工具对比"&gt;2.5 与现代工具对比
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;工具&lt;/th&gt;
					&lt;th&gt;强项&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Axure RP&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;逻辑交互最完整、逻辑面板最丰富&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Figma&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;多人实时协作、组件库生态&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Sketch&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Mac 生态、矢量&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;墨刀 / 即时设计&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;国产、轻量&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;draw.io&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;流程图 + ER 图免费&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;经验法则&lt;/strong&gt;：&lt;strong&gt;复杂逻辑交互用 Axure&lt;/strong&gt;，&lt;strong&gt;简单 mockup 用 Figma&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="三powerdesigner数据库建模的老牌强者"&gt;三、PowerDesigner：数据库建模的老牌强者
&lt;/h2&gt;&lt;h3 id="31-定位"&gt;3.1 定位
&lt;/h3&gt;&lt;p&gt;PowerDesigner 1989 年起源 Powersoft，&lt;strong&gt;SAP 收购 Sybase 后纳入麾下&lt;/strong&gt;。2014 年是 16.5/16.6 版本。&lt;strong&gt;两套核心能力&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CDN/PDM&lt;/strong&gt;：概念数据模型 / 物理数据模型&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OOM/BPM&lt;/strong&gt;：面向对象模型 / 业务流程模型&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="32-安装"&gt;3.2 安装
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;16.5/16.6 SP06 兼容 Windows 7/8/10&lt;/li&gt;
&lt;li&gt;16.7 是民间对 16.6 升级包的称呼&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;需要 JDK 1.6+&lt;/strong&gt;（&lt;strong&gt;是的 2014 时代需要 Java&lt;/strong&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="33-cdm--pdm--sql-三件套"&gt;3.3 CDM → PDM → SQL 三件套
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;概念模型（CDM）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ 自动转换
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;物理模型（PDM）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ 生成 SQL
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;数据库（MySQL/Oracle/PostgreSQL/...）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;为什么需要 CDM&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CDM 关注&lt;strong&gt;业务实体&lt;/strong&gt;（客户、订单、商品）&lt;/li&gt;
&lt;li&gt;PDM 关注&lt;strong&gt;数据库细节&lt;/strong&gt;（字段类型、索引、约束）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;业务变了只改 CDM，PDM 自动重生成&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="34-名称转注释"&gt;3.4 名称转注释
&lt;/h3&gt;&lt;p&gt;PDM 里 &lt;code&gt;Name&lt;/code&gt; 是逻辑名（中文友好），&lt;code&gt;Code&lt;/code&gt; 是物理名（英文/SQL 字段）。批量把 &lt;code&gt;Name&lt;/code&gt; 复制到 &lt;code&gt;Comment&lt;/code&gt;：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Tools → Execute Commands → Edit/Run Scripts&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;#39; Name → Comment
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Dim model
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Set model = ActiveModel
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;For Each tbl In model.Tables
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; tbl.Comment = tbl.Name
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; For Each col In tbl.Columns
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; col.Comment = col.Name
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Next
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Next
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;执行后所有字段 Comment 都是 Name 中文，&lt;strong&gt;DDL 导出时自动带 COMMENT&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="35-全局通用字段"&gt;3.5 全局通用字段
&lt;/h3&gt;&lt;p&gt;每个表都加：&lt;code&gt;create_by / create_time / update_by / update_time / sys_org_code&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;两种做法&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;PDM 全局模板&lt;/strong&gt;：&lt;code&gt;Tools → Model Options → Naming Convention → Default Field&lt;/code&gt; 添加&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;复制粘贴&lt;/strong&gt;：先建一个表，&lt;strong&gt;右键 → Copy → Paste&lt;/strong&gt; 保留字段&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="36-导出-ddl"&gt;3.6 导出 DDL
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Database → Generate Database&lt;/code&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Directory&lt;/code&gt;: 输出目录&lt;/li&gt;
&lt;li&gt;&lt;code&gt;File name&lt;/code&gt;: 默认 &lt;code&gt;Script.sql&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Generation options&lt;/code&gt;：勾选 &lt;code&gt;Check model&lt;/code&gt;、&lt;code&gt;Generate name in comment&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;导出的 SQL 直接 Navicat 执行&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="37-pdmreader免费-pdm-查看器"&gt;3.7 PDMReader：免费 PDM 查看器
&lt;/h3&gt;&lt;p&gt;PDM 文件是 PowerDesigner 私有格式，&lt;strong&gt;没有 PD 看不了&lt;/strong&gt;。&lt;strong&gt;PDMReader&lt;/strong&gt; 是国产开源 PDM 浏览器：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;装好后直接 &lt;code&gt;.pdm&lt;/code&gt; 文件 → 自动生成 HTML 报告&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;免费导出 Word / Excel 数据字典&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下载地址 &lt;code&gt;http://www.pdmreader.com/&lt;/code&gt;（小众，但好用）。&lt;/p&gt;
&lt;h2 id="四vscode轻量编辑器的王者"&gt;四、VSCode：轻量编辑器的王者
&lt;/h2&gt;&lt;h3 id="41-定位"&gt;4.1 定位
&lt;/h3&gt;&lt;p&gt;VSCode 2015-04 发布，&lt;strong&gt;4 年时间击败 Sublime、Atom&lt;/strong&gt;。2014 时代它还是个&amp;quot;新生儿&amp;quot;——本文以 2024 视角写&amp;quot;VSCode 在 2014 之后的崛起&amp;quot;。&lt;/p&gt;
&lt;h3 id="42-必备扩展按场景"&gt;4.2 必备扩展（按场景）
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;通用&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;扩展&lt;/th&gt;
					&lt;th&gt;用途&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Chinese (Simplified) Language Pack&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;中文菜单&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Atom One Dark Theme&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;经典暗色&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Markdown PDF&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;MD 转 PDF&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;IntelliJ IDEA Keybindings&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;IDEA 快捷键习惯&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Java 开发&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;扩展&lt;/th&gt;
					&lt;th&gt;用途&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Extension Pack for Java&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;微软官方全家桶&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Spring Boot Extension Pack&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Spring 全家桶&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Maven for Java&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Maven 集成&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Debugger for Java&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;调试&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="43-配置代理"&gt;4.3 配置代理
&lt;/h3&gt;&lt;p&gt;VSCode 启动可能需要代理（如果插件下载慢）：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;File → Preferences → Settings → 搜 proxy&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;http.proxy&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;http://127.0.0.1:1081&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;http.proxyStrictSSL&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;或者给 git 单独设代理：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git config --global http.https://github.com.proxy socks5://127.0.0.1:1080
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="44-常用快捷键"&gt;4.4 常用快捷键
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;快捷键&lt;/th&gt;
					&lt;th&gt;作用&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Ctrl + P&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;快速打开文件&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Ctrl + Shift + P&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;命令面板&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Ctrl + B&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;切换侧边栏&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Ctrl + &lt;/code&gt; `&lt;/td&gt;
					&lt;td&gt;切换终端&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Ctrl + Shift + F&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;全项目搜索&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;F12&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;跳转到定义&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Alt + F12&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;查看定义（侧边）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Ctrl + K Ctrl + C&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;注释&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Shift + Alt + F&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;格式化&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Ctrl + /&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;行注释&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="五traeai-辅助编程的新时代"&gt;五、Trae：AI 辅助编程的新时代
&lt;/h2&gt;&lt;h3 id="51-定位"&gt;5.1 定位
&lt;/h3&gt;&lt;p&gt;Trae（2024）是字节跳动推出的 &lt;strong&gt;AI Native IDE&lt;/strong&gt;，&lt;strong&gt;深度集成 Claude 3.5/GPT-4o&lt;/strong&gt;。&lt;strong&gt;对标 Cursor&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="52-核心能力"&gt;5.2 核心能力
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AI Chat 侧栏&lt;/strong&gt;：写需求 → AI 自动改多文件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inline Edit&lt;/strong&gt;：&lt;code&gt;Ctrl+K&lt;/code&gt; 在光标处改写代码&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent Mode&lt;/strong&gt;：写任务 → AI 拆解 → 自动执行 + 自我测试&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;上下文感知&lt;/strong&gt;：自动读光标所在文件 + 关联文件&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="53-适用场景"&gt;5.3 适用场景
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;新项目从 0 到 1&lt;/strong&gt;：Agent 模式一键生成脚手架&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;老项目重构&lt;/strong&gt;：AI 全项目扫描 → 出重构方案&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bug 定位&lt;/strong&gt;：贴错误堆栈 → AI 给出最小复现 + 修复建议&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;单元测试生成&lt;/strong&gt;：选中方法 → AI 自动生成 JUnit 5 / pytest 用例&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="六notepadwindows-文本编辑器之王"&gt;六、Notepad++：Windows 文本编辑器之王
&lt;/h2&gt;&lt;h3 id="61-定位"&gt;6.1 定位
&lt;/h3&gt;&lt;p&gt;Notepad++ 2003 年由 Don Ho 开发，&lt;strong&gt;基于 Scintilla 编辑组件&lt;/strong&gt;。2014 时代是&lt;strong&gt;程序员最常用的&amp;quot;非 IDE&amp;quot;文本编辑器&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="62-安装与配置"&gt;6.2 安装与配置
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;官方 &lt;code&gt;https://notepad-plus-plus.org/downloads/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;32 位版&lt;/strong&gt;兼容更多插件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;首次启动&lt;/strong&gt;：Settings → Preferences → General → Language → &lt;code&gt;中文&lt;/code&gt;（界面中文化）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;字体&lt;/strong&gt;：Consolas 10pt（等宽字体之首）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="63-必备插件"&gt;6.3 必备插件
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;插件&lt;/th&gt;
					&lt;th&gt;用途&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Compare&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;文件差异对比&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Explorer&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;文件浏览器侧栏&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;NppFTP&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;内置 FTP/SFTP&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;JSTool&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;JSON 格式化&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;XML Tools&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;XML 美化&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;MIME Tools&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Base64 编解码&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Markdown Panel&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;MD 实时预览&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="64-杀手锏功能"&gt;6.4 杀手锏功能
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;列编辑&lt;/strong&gt;：&lt;code&gt;Alt + 鼠标拖动&lt;/code&gt;（&lt;strong&gt;多光标同时输入&lt;/strong&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;正则替换&lt;/strong&gt;：&lt;code&gt;Ctrl+H&lt;/code&gt; 勾选 &lt;code&gt;Regular expression&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多文件搜索&lt;/strong&gt;：&lt;code&gt;Ctrl+Shift+F&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;宏录制&lt;/strong&gt;：&lt;code&gt;Macro → Start Recording&lt;/code&gt;（&lt;strong&gt;重复操作自动化&lt;/strong&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="65-与-vscode-对比"&gt;6.5 与 VSCode 对比
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;Notepad++&lt;/th&gt;
					&lt;th&gt;VSCode&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;启动速度&lt;/td&gt;
					&lt;td&gt;★★★★★&lt;/td&gt;
					&lt;td&gt;★★★&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;内存&lt;/td&gt;
					&lt;td&gt;★★★★★&lt;/td&gt;
					&lt;td&gt;★★&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;插件生态&lt;/td&gt;
					&lt;td&gt;★★&lt;/td&gt;
					&lt;td&gt;★★★★★&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;大文件（&amp;gt;1 GB）&lt;/td&gt;
					&lt;td&gt;★★★★&lt;/td&gt;
					&lt;td&gt;★★（会卡）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;多语言&lt;/td&gt;
					&lt;td&gt;★★★&lt;/td&gt;
					&lt;td&gt;★★★★★&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;经验法则&lt;/strong&gt;：&lt;strong&gt;大文件 / 临时查看 → Notepad++&lt;/strong&gt;，&lt;strong&gt;项目开发 → VSCode&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="七android-studio移动开发官方-ide"&gt;七、Android Studio：移动开发官方 IDE
&lt;/h2&gt;&lt;h3 id="71-定位"&gt;7.1 定位
&lt;/h3&gt;&lt;p&gt;2013-12 Google 发布 Android Studio 1.0，&lt;strong&gt;正式取代 Eclipse ADT&lt;/strong&gt;。&lt;strong&gt;基于 IntelliJ IDEA 社区版&lt;/strong&gt;——前文提到的 IDEA 快捷键、插件&lt;strong&gt;全部通用&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="72-安装与-sdk"&gt;7.2 安装与 SDK
&lt;/h3&gt;&lt;p&gt;官方 &lt;code&gt;https://developer.android.com/studio&lt;/code&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;安装时选 &lt;code&gt;Android SDK&lt;/code&gt; + &lt;code&gt;Android Virtual Device (AVD)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;首次启动自动下载 SDK 平台工具 + Build Tools&lt;/strong&gt;，&lt;strong&gt;强烈建议配置代理&lt;/strong&gt;（详见 IDEA 章节）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="73-gradle-配置"&gt;7.3 Gradle 配置
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;gradle-wrapper.properties&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-properties" data-lang="properties"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;distributionBase&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;GRADLE_USER_HOME&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;distributionPath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;wrapper/dists&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;distributionUrl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;https\://services.gradle.org/distributions/gradle-8.5-bin.zip&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;zipStoreBase&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;GRADLE_USER_HOME&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;zipStorePath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;wrapper/dists&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;国内加速&lt;/strong&gt;：用阿里云镜像：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-properties" data-lang="properties"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;distributionUrl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;https\://mirrors.aliyun.com/macports/distfiles/gradle/gradle-8.5-bin.zip&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="74-模拟器选型"&gt;7.4 模拟器选型
&lt;/h3&gt;&lt;p&gt;Android Studio 自带 AVD Manager：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;x86_64 Image&lt;/strong&gt;：Intel CPU 加速（&lt;strong&gt;推荐&lt;/strong&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ARM Image&lt;/strong&gt;：兼容性好但慢&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;物理机调试&lt;/strong&gt;：开发者选项 → USB 调试 → &lt;code&gt;adb devices&lt;/code&gt; 看&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="75-关键快捷键"&gt;7.5 关键快捷键
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;快捷键&lt;/th&gt;
					&lt;th&gt;作用&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Alt + Enter&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;导包 / 修复&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Ctrl + O&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;重写方法&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Ctrl + I&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;实现方法&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Ctrl + Shift + A&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;找动作&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Ctrl + Alt + L&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;格式化&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Alt + Insert&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;生成代码&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="八组合实战产品设计开发发布"&gt;八、组合实战：产品→设计→开发→发布
&lt;/h2&gt;&lt;h3 id="81-完整工作流"&gt;8.1 完整工作流
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;产品经理（Axure）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ 输出原型 + 交互文档
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;UX 设计师（Figma/Axure）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ 输出 UI 设计稿
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;前端（VSCode + Trae AI）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ 输出静态页面
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;后端（IntelliJ IDEA）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ 输出 API + 业务
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;数据库（PowerDesigner）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ 输出 PDM + DDL
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;运维（Navicat + 服务器）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ 部署 + 监控
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="82-移动端"&gt;8.2 移动端
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;产品（Axure）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;UI 设计师（Figma）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Android 端（Android Studio）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iOS 端（Xcode）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;测试（Android Studio AVD + 真机）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="九常见问题"&gt;九、常见问题
&lt;/h2&gt;&lt;h3 id="91-axure-启动慢"&gt;9.1 Axure 启动慢
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;关掉&amp;quot;自动保存&amp;quot;&lt;/li&gt;
&lt;li&gt;减少页面数量&lt;/li&gt;
&lt;li&gt;升级 SSD&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="92-powerdesigner-反向工程从数据库生成-pdm"&gt;9.2 PowerDesigner 反向工程（从数据库生成 PDM）
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;File → Reverse Engineer → Database&lt;/code&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;选择 ODBC 数据源或自定义 JDBC&lt;/li&gt;
&lt;li&gt;选表 → 生成 PDM&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;注意&lt;/strong&gt;：需要先在 Windows 装好 ODBC 驱动&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="93-vscode-插件装不上"&gt;9.3 VSCode 插件装不上
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Extensions → Search → Install&lt;/code&gt; 失败通常因为&lt;strong&gt;插件市场被墙&lt;/strong&gt;。对策：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 离线安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code --install-extension /path/to/extension.vsix
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;或配置国内镜像：编辑 &lt;code&gt;argv.json&lt;/code&gt; 替换 marketplace。&lt;/p&gt;
&lt;h3 id="94-notepad-大文件卡"&gt;9.4 Notepad++ 大文件卡
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Settings → Preferences → Editing&lt;/code&gt; → 取消 &lt;code&gt;Enable large file detection&lt;/code&gt;（超过 100MB 自动关掉语法高亮）。&lt;/p&gt;
&lt;h3 id="95-android-studio-gradle-同步慢"&gt;9.5 Android Studio Gradle 同步慢
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;~/.gradle/init.gradle&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-groovy" data-lang="groovy"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;allprojects&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;repositories&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;maven&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;https://maven.aliyun.com/repository/public&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;maven&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;https://maven.aliyun.com/repository/google&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;maven&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;https://maven.aliyun.com/repository/gradle-plugin&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="十下一步"&gt;十、下一步
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;想看 IDEA 深度：&lt;strong&gt;[2014-04-15 IntelliJ IDEA 全攻略]&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;想看版本控制：&lt;strong&gt;[2014-11-15 Git 与版本控制]&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;想看数据库建模输出：&lt;strong&gt;[2016-11-15 数据库客户端实战]&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;本文写于 2014 年，回看当时&lt;/strong&gt;：Axure 7 是产品经理标配，Figma 直到 2016 年才发布；&lt;strong&gt;PowerDesigner 至今仍是金融/电信/制造行业的&amp;quot;老牌&amp;quot;&lt;/strong&gt;；VSCode 2015 年发布后 4 年击败 Sublime 创下编辑器神话——&lt;strong&gt;这些工具的演化史就是一部 Web 开发演进史&lt;/strong&gt;。&lt;/p&gt;

 &lt;/blockquote&gt;</description></item></channel></rss>