news 2026/9/9 1:20:25

Claude Code 从零到可用:AI编程助手的安装鉴权与项目配置指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Claude Code 从零到可用:AI编程助手的安装鉴权与项目配置指南

先把结论放在前面:Claude Code 和我之前用过的 AI 编程助手们,在“装完第一次双击”那一刻起就不太一样。它不是安安静静蹲在编辑器里帮你补全函数、生成注释的插件,而是一个会在终端里主动读文件、跑命令、改代码的自主 AI 编程助手。这篇教程就是我最近从零开始在一台工作笔记本上配置 Claude Code 的完整记录,从安装前置检查、npm 全局安装、登录鉴权,到第一次让它处理真实项目任务,以及这中间踩过的几个坑,都按我自己实际操作时的顺序写下来。如果你正准备安装但还不太确定它到底能干什么、需要哪些权限、装完又该怎么配置,这篇文章可以直接当参考。

1. 先搞清楚 Claude Code 是什么,再决定要不要装

我第一次正经用 Claude Code,是在一个刚接手不久的历史项目里。那个项目文档缺得厉害,几个模块之间的边界全靠注释和隐约的命名暗示勉强撑着。以前用 AI 补全插件,在我敲下半个函数名之后确实能补出后半段,可它根本不关心这个项目别的地方是怎么写的,代码风格、模块依赖、历史包袱一概不管。Claude Code 走的是另一条路线:你把终端停在项目根目录,启动它之后,它会主动去读文件、搜索上下文、运行命令、查看结果,再根据这些信息继续下一步动作。它更像一个随时能叫来帮忙的结对程序员,而不是一个只盯着你光标的输入法。

1.1 它能做的事情,比“代码补全”要宽得多

Claude Code 本质上是跑在命令行里的会话式编程代理(agent)。你给它一个目标,它会自己拆解任务,在项目里翻找相关文件,必要时执行 shell 命令来验证思路,然后把代码改动落实到文件里。我在实际使用中比较常用的场景有这么几类:

  • 接手不熟悉的仓库时,让它先做“代码考古”。给它一个入口文件或者一个报错堆栈,让它顺着调用链解释清楚数据是怎么流转的。
  • 重构局部代码。比如把一个超过三百行的函数拆开,它能先分析出依赖关系,再分步修改,过程中跑测试确认没有破坏现状。
  • 补测试用例。它能阅读已有代码逻辑,按边界条件生成测试,我只需要逐条审查测试断言合不合理。
  • 处理一些重复性改动。比如批量替换日志格式、统一 import 顺序、给所有 API 调用加上超时参数,这些工作手工做特别容易遗漏,它有 git diff 做底,改完能一目了然。

这些能力让它的定位和“编辑器里的补全插件”有明显区别。补全插件是在你已经知道要写什么的情况下,帮你把代码敲得更快;Claude Code 则更像是帮你去“搞清楚要写什么、然后把它写出来”。

1.2 哪些人适合现在就装,哪些人可以再等等

如果你平时主要工作是写业务代码,手里维护着两三个中型仓库,愿意花一点时间学习命令行的基本操作,那 Claude Code 值得装。它对那些“说得清需求但不想一步步敲”的场景特别友好,尤其是代码阅读、测试生成、跨文件改动这类任务。

相反,如果你对当前项目的技术栈完全没有概念,也不清楚版本管理的基本操作,那我建议先别急着让它大改代码。工具确实能读文件、能执行命令,但最终判断“这个改动对不对”的责任还是在你自己身上。这就像请了一个干活很勤快的实习生,该盯的质量红线一条都不能少。装之前先有这个意识,后面用起来才不会翻车。

我个人还有一条很实际的建议:拿一个你完全有把握的练手项目来试装,别一上来就扔进生产环境的仓库。这样即使配置出错、命令执行得乱七八糟,损失也完全可控。

2. 安装前十分钟:先把自己的环境理清楚

很多人安装出错,不是因为后续哪条命令敲错了,而是基础环境本身就没对齐。Claude Code 是命令行工具,它对运行环境有明确要求,安装前花十分钟检查一遍,比装到一半开始排查报错要省事得多。

2.1 检查 Node.js 与 npm 版本

Claude Code 官方提供的是 npm 安装包,也就是说这台机器上必须具备 Node.js 运行时。检查命令很简单:

node -v npm -v

我安装时环境里的 Node.js 是 20 LTS,npm 是 10.x。就我观察到的情况,Node.js 18 以上通常问题不大,但如果你装的是很老的 14 或 16,建议先用 LTS 版本。很多工具链的问题追根溯源都是 Node 版本太旧,Claude Code 对 JavaScript 新语法和 API 有要求,版本不够会在启动阶段直接抛错。

如果你机器上还没有 Node.js,我建议优先装一个 LTS 版本,而不是最新版。这里也顺带提醒一句:尽量别用sudo去装全局 npm 包,后面权限问题会少很多。

2.2 账号权限:订阅和 API Key 是两条不同的路

这里要提前说清楚一个事:Claude Code 这个工具本身能免费安装,但真正要调用大模型干活,账号必须具备对应权限。我目前知道的主流方式有两种:

第一种是使用 Claude 的订阅账号。订阅套餐里包含了命令行工具的使用权,安装完成后启动claude,按提示登录授权即可,适合个人开发者、日常写代码比较多的用户。

第二种是通过开发者控制台申请 API Key。这种更适合有独立开发需求、需要按量计费、或者要在脚本化流程中调用能力的场景。拿到 API Key 后,把它配置到环境变量ANTHROPIC_API_KEY里,启动时工具就能直接识别。

我第一次配置的时候差点在环境变量上翻车。这里补充一个细节:环境变量的优先级通常高于交互式登录的凭证,如果你本地既做过登录授权,又设置了 API Key,工具实际用的是后者。后面如果发现“怎么登录了还是报鉴权错误”,可以先检查一下这个变量是不是不小心被设置成了旧值。

2.3 想清楚要在哪些目录里运行

Claude Code 是“跟着项目走”的工具,不是随便在哪个目录敲claude都行。它的上下文、文件读取范围和命令执行范围,都和你启动它的目录强相关。

实际使用中,我基本只在两类目录里启动:

  • 本地 git 仓库的根目录或子目录。Claude Code 会利用 git 信息判断当前分支、查看 diff,方便把改动控制在可回溯范围内。
  • 独立的小项目目录。比如临时脚本、原型代码、写文档的工作目录。

有一类目录我会刻意避开:你的家目录。如果你在~下直接启动它,它会觉得整个用户目录下所有文件都可能相关。一次让我查一个小脚本里的问题,它把.bashrc.npmrc、各种配置文件全读了一遍。不是说不能让它读,而是毫无必要的上下文既浪费 token,也让响应变得又慢又杂。

所以我的习惯是先cd进项目,再执行git status看一眼仓库状态,最后才启动 Claude Code。这十秒钟的前置动作,后面每一轮对话都会受益。

3. 完整安装实操:从一条 npm 命令到第一个真实任务

环境确认没问题之后,安装本身并不复杂。我直接用 npm 全局安装,这也是目前最常规的一条路。

3.1 全局安装并验证

打开终端,执行:

npm install -g @anthropic-ai/claude-code

如果你是第一次在系统层面装全局包,这条命令可能会因为权限不足报EACCES。我先说正解:不要立刻去试sudo npm install -g,虽然那确实能绕过权限问题,但会让后续的全局包都面临权限分裂的风险。更稳妥的方案是用 nvm 这类 Node 版本管理工具重新安装 Node.js,把全局安装路径放到当前用户目录下。如果你已经用 nvm 管理 Node,通常不会遇到这个权限报错。

安装完成后,先做事前验证:

claude --version

如果能看到版本号,说明安装成功。再看一眼帮助信息:

claude --help

这一步不是走形式,主要是确认当前版本可用的子命令。不同时期的版本在参数上会有细微差异,比如有的版本支持--continue直接继续上一次会话,有的版本命令名不同。遇到不确定的选项,--help永远比记忆最靠谱。

3.2 完成登录鉴权

第一次运行时,直接启动:

claude

当前版本通常会在首次启动时引导你完成登录。它一般会尝试唤起默认浏览器,让你在页面上确认授权;如果没有默认浏览器或者没有弹出来,终端里一般会给出一个授权链接,手动复制到浏览器打开就行。

我在一台没有图形界面的远程服务器上操作时,浏览器弹不出来,当时就是复制链接到本地浏览器完成的授权,然后回到服务器终端确认状态。所以不要一看到“没有弹出浏览器”就觉得装失败了,关键是要留意终端输出的下一步提示。

授权成功后,工具会在当前用户目录下写入本地凭证。后续再启动就不用重复登录了。这里有两个细节要提醒:

第一,凭证文件不要提交到 git 仓库,也尽量不要用网盘同步到其他机器,除非你明确知道自己在做什么。它相当于你这台机器的“门禁卡”。

第二,如果你团队里有同事已经配好了代理或特殊调用环境,也别直接把他整个配置目录拷过来。每个机器的用户路径、系统环境不同,配置里藏着很多本机细节,复制过来大概率跑不起来。

3.3 第一次启动与一个“只读任务”

登录之后,工具会进入一个交互式会话界面。你可能会看到一些欢迎语或者使用提示,不同的版本措辞不完全一样,但基本都支持直接输入自然语言。

我不建议第一个任务就让它改代码。更稳的做法是先让它做一件只读的事,比如:

请先阅读项目根目录的 README,然后告诉我这个项目的启动命令、测试命令分别是什么。

这样一个任务有几个好处:能验证它真正读到了项目文件;能看到它响应时的“思考路径”;也能让你确认它对项目的理解方式是否正常。如果它答得驴唇不对马嘴,那说明目录不对、上下文没读到,或者当前项目结构太特殊,这些都应该在动代码之前暴露出来,而不是等它改完代码之后。

3.4 让它真正动手做一个最小改动

只读任务通过后,再进入第一个带写操作的环节。我的建议是从一个影响面极小的任务开始,比如修复 README 里的一个错误命令、给一个函数补上缺失的参数默认值。

我当时用的练手任务是:“把项目里某个工具函数中的日志输出加上统一前缀”。这个任务涉及文件读取、匹配修改、结果确认,但不会改动核心业务逻辑。它执行完会主动显示改动过的文件和 diff,我也能通过git diff二次检查。

这里多说一句:在首次让它写代码时,最好保持终端交互模式,不要一上来就开“完全自动执行”那种高权限模式。等你对它的行为习惯有了把握,再逐级放开权限也不迟。

4. 新装用户最容易踩的五个坑,以及我的排查方法

写安装教程,最有价值的部分其实是“装不上/跑不起来时怎么办”。下面这五个问题,是我自己踩过、或者在帮朋友排错时见过的典型案例。每个我都会按“现象→原因→排查方法→解决建议”的顺序讲。

4.1 npm 全局安装报 EACCES:权限问题的正解

现象:执行npm install -g @anthropic-ai/claude-code时,终端输出一堆npm ERR! Error: EACCES,最后告诉你没有权限在某个目录写入。

原因:npm 的全局安装目录被放在了系统级目录里,而当前用户没有写权限。这在用系统自带 Node.js 的 mac 和部分 Linux 发行版上很常见。

排查方法:先确认当前 npm 的全局目录在哪里:

npm config get prefix

如果结果是一个/usr/lib/usr/local下的系统目录,那问题大概率就在这里。

解决建议:最省心的是改用 nvm 安装 Node.js,让整个 Node 工具链都待在用户目录下,全局包不会再和系统目录打架。如果短期不方便换,另一个方案是在 shell 配置里手动把 npm 的全局目录改到~/.npm-global,然后把这个目录加到PATH里:

npm config set prefix ~/.npm-global

改完之后记得重新加载 shell 配置或者重开终端。千万不要为了省事直接sudo npm install -g,后面每次遇到全局包更新都要继续和权限搏斗,不划算。

4.2 输入 claude 提示 command not found:路径没对上

现象:安装过程没有任何报错,但新开一个终端输入claude,提示找不到命令。

原因:npm 全局安装成功,但它把可执行文件放进了某个不在当前PATH里的目录。你已经安装了,只是 shell 还没找到它。

排查方法:执行:

npm prefix -g

这会告诉你全局目录在哪。比如输出是/Users/yourname/.nvm/versions/node/v20.x.x/bin,那就去看这个目录下有没有claude文件。确认存在后,把这个路径加入PATH

解决建议:在~/.zshrc~/.bashrc末尾加上一行:

export PATH="/Users/yourname/.nvm/versions/node/v20.x.x/bin:$PATH"

然后执行source ~/.zshrc或直接重开终端。如果你用了 nvm,这种路径冲突一般不会出现;会遇到的通常是自己手动安装过多个 Node 版本,或者之前用 Homebrew 装过 Node,后来又换了其他管理方式。旧路径残留很容易让人以为新包没装上。

4.3 登录授权时浏览器没弹出来,怎么完成授权

现象:启动claude后,提示需要登录,但浏览器没有自动打开,或者打开了却是空白页。

原因:常见的有两种。一种是无图形界面的远程环境,系统根本没有“唤起浏览器”的能力;另一种是终端在等待授权完成时,你去打开了浏览器但授权页没正常加载出来。

排查方法:先看终端输出里有没有完整的授权链接。有的话,手动复制到本地浏览器打开;没有的话,翻翻启动时的提示,有些版本会提供一个一次性授权码。

解决建议:浏览器里完成授权后,回到终端等待它自动跳转即可。有一点容易被忽略:授权页显示成功之后,终端这边可能需要几秒到十几秒才会刷新状态,别急着按Ctrl+C中断。我当时在这块就犯过急性子,授权成功后看终端没动静,直接中断了进程,结果第二次启动又要重新授权。后来每次都会多等一会儿,基本没再出过问题。

4.4 启动时报 401/403 或模型权限相关错误

现象:Claude Code 能启动,但一旦发起真实请求,很快就返回鉴权或权限相关错误,提示不能调用模型或账号没有权限。

原因:本质上是“工具有凭证,但凭证没权限”或者“凭证冲突”。我遇到的几种常见情况:

  • 账号是免费级别,还没有开通对应模型访问能力。
  • 设置了ANTHROPIC_API_KEY环境变量,但这个 Key 是临时的或者已被注销。
  • 本地存在多个凭证文件,工具读到了旧的那个。

排查方法:重点检查两点。第一,看当前环境变量里有没有残留的ANTHROPIC_API_KEY,在终端打印一下:

echo $ANTHROPIC_API_KEY

如果有值,先确认它是不是当前要用的 Key。第二,查看~/.claude目录下是否存在旧的配置文件,必要时备份后清理,再重新执行一次登录。

解决建议:把环境变量理清,重新触发授权,基本能解决大半问题。如果账号权限本身有问题,那就只能去账号后台确认套餐或者额度状态了。

4.5 “它怎么动了我没让动的东西”:权限边界怎么设

现象:第一次让 Claude Code 执行一个任务时,它不仅改了目标代码,还顺手改了其他文件,或者执行了你看不太懂的 shell 命令。

原因:Claude Code 具备自主执行能力,在默认情况下它会根据任务判断需要执行哪些操作。如果用户没有预设限制,它可能会扩大行动范围。工具的“想帮忙”和你的“实际意图”之间,需要靠权限配置来对齐。

解决建议:我会分两层来控制。

第一层,交互审批。在会话过程中,遇到读文件、写文件、执行命令这类关键操作,工具通常会请求许可或被告知需要许可。设置成每一步都先问,能让我看清楚它下一步要干什么。

第二层,把规则固化到配置文件里。比如可以设置某些目录只读、某些命令不允许执行。对这个话题,更详细的规则写到下一章的 settings 配置里。

如果你第一次用就想完全让它自动跑,建议克制一下。真实项目里,一个命令执行错误带来的后果,远比“多等几秒审批”更耗时。我给自己的要求是:生产仓库用审批模式,个人玩具项目再考虑放开自动执行。

5. 安装完成后的第一次配置:让 Claude Code 记住你的项目

工具跑起来只是第一步。真正让它“好用”,需要做一点配置,让它从“一个聪明的通用助手”变成“熟悉你这个项目的协作伙伴”。

5.1 用 CLAUDE.md 给工具建立项目记忆

这是我认为最值得做的一项配置。Claude Code 启动后,会读取项目根目录下的CLAUDE.md文件,如果有的话。这个文件相当于给 AI 助手的“项目入职手册”。

举个例子。我维护的一个前端项目,根目录下的CLAUDE.md大致长这样:

# 项目名 - 这是一个中后台管理系统,技术栈为 Vue3 + TypeScript + Vite。 - 启动命令:npm run dev - 测试命令:npm run test:unit - 目录说明:src/api 放接口定义,src/views 放页面组件,src/components 放公共组件。 - 约定:组件命名使用 PascalCase,接口请求统一走 src/utils/request 中的封装。 - 特别提醒:src/generated 目录是自动生成代码,不要手动修改。

有了这个文件后,我再也不用每次开会话都重新解释一遍项目背景。它自己就知道先看哪里、用什么命令启动、哪些目录不该碰。

一个常见疑问是:CLAUDE.md要不要提交到 git?我的看法是,如果文件里没有敏感信息,完全可以提交,这对团队里所有人都有价值。反过来,如果里面有个人路径或机器相关的内容,那就让它留在本地。

5.2 把权限规则写进 settings 文件

Claude Code 支持通过配置文件来约定权限边界。一般分为用户级和项目级:用户级配置放在~/.claude/settings.json,项目级配置放在项目里的.claude/settings.json。后者可以提交到仓库,让团队成员共用同一套规则,但不建议把个人凭证放在里面。

一个常见配置思路是给某些路径设置为只读,给某些操作设置为禁止,给某些目录允许自动编辑而无需每次询问:

{ "permissions": { "allow": [ "Read(src/components/**)", "Edit(src/components/**)" ], "deny": [ "Write(src/generated/**)", "Bash(rm -rf *)" ] } }

注意,不同版本的权限规则定义可能稍有变化。我建议先执行claude --help或查看当前版本的文档,以官方字段为准。这类配置文件的重点不是背 Syntax,而是理解它的结构:它本质上是把“哪些能自动做、哪些必须问、哪些永远不做”这三件事说清楚。

5.3 学会用内置指令管理会话和上下文

Claude Code 的交互界面支持不少以/开头的内置指令。我经常用的几个包括:查看帮助、清空当前上下文、查看当前会话状态。不同版本的具体指令名会有变化,但入口基本都在/help里。

说一个很实际的经验:当你在同一目录下长时间工作,经过许多轮对话后,上下文会越来越长。如果发现它的回答开始“忘事”或者变得迟钝,通常不是它变笨了,而是上下文太拥挤。这时候把会话清理一下,或者重新开一个新会话,往往立刻恢复正常。

另外,每次启动claude时,它会重新读取当前目录下的CLAUDE.md。所以改完项目结构后,记得顺手更新这个文件,让它始终反映现状。

5.4 和 VS Code 配合使用的正确姿势

我最常用的编辑器是 VS Code。Claude Code 除了终端版之外,也提供了官方扩展,安装后可以在编辑器里直接打开一个可视化面板来操作同一套能力。搜索扩展的时候,注意看一下发行方,认准官方渠道,别装到同名仿冒插件。

我个人的用法是:CLI 负责执行复杂任务和写文件,VS Code 扩展主要负责让我在阅读代码时更直观地看到改动位置。比如让它在十个文件里统一改动,编辑器面板里直接点进 diff 就能看。两边登录状态是相通的,装完 CLI 再去装扩展,一般不需要重复授权。

这里有一个很容易踩的坑:装了扩展后,它默认打开的面板可能在一个未打开任何文件夹的空窗口里。如果里面没有任何项目上下文,操作起来会觉得“它怎么什么都看不到”。解决方法是先用 VS Code 打开具体项目文件夹,再启动 Claude Code 面板。

6. 安装之外,我更想说的几件事

6.1 先小步试:一次只让它做一件有限的事

安装完成后,最糟糕的用法是给它一句“帮我把这个项目优化一下”。这种任务目标模糊、涉及面又大,它大概率会改出一堆你难以理解的代码,既不好审查,也不好回滚。

我自己的习惯是把任务拆得很小。宁可连续发起三轮任务,也不让它一轮做三件事。比如第一轮让它分析某个函数目前做了什么,第二轮让它给出重构方案,第三轮才让它动手改。每一轮完成后我都会看一眼 diff,确认没有越界。

6.2 版本更新快,要养成看更新日志的习惯

这类 AI 编程工具还处在快速迭代期,几乎每个月都有新版本。今天好用的配置项,下个版本可能改名;今天不支持的模型能力,下个版本可能就上线了。我通常会在它提示有更新时执行一下更新命令,或者在终端里定期查一下版本:

claude --version claude update

如果你发现某天它“突然变了”,先回忆一下最近是不是刚更新过版本。这类工具很多行为变化,其实不是玄学,而是配置格式更新了。

6.3 别盲目堆工具:本地模型、配置切换工具等

Claude Code 火了之后,顺手带火了一批周边工具。有人做了配置切换器,让不同 API 配置之间可以一键切换;也有人尝试把本地开源模型接到 Claude Code 的界面里用。

我的态度是:周边工具可以关注,但别急着全装。配置切换工具适合日常需要在多个不同调用场景之间反复横跳的用户,普通开发者用官方的一套登录流程就够了。至于接入本地模型,玩玩可以,真要拿来做严肃开发,效果、稳定性、上下文能力和官方模型仍有差距。

工具圈最不缺的就是“看起来很酷”的新东西,缺的是能稳定跑三个月还不给你惹麻烦的配置。先把你手头这套工具用到顺手,再考虑生态扩展,是我在这个项目上最大的体会。

回到安装这件事本身:Claude Code 其实没有多难装,一条 npm 命令、一次登录授权、一个合适的工作目录,剩下的不过是慢慢磨合。真正决定它好不好用的,不是你有没有装成功,而是你有没有给它清晰的边界、合理的任务,以及足够认真的代码审查习惯。希望这份从零开始的配置记录,能帮你少走一点我刚装时走过的弯路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 1:19:48

状态机详解(一段式、二段式、三段式)

一、有限状态机FSM(Finite State Machine) 组成元素: 输入、状态、状态转移条件、输出。 可以分为两类: Mealy状态机:时序逻辑的输出不仅取决于当前状态,还与输入有关; Moore状态机:时序逻辑的输出只与当前状态有关。 描述方式: ① 状…

作者头像 李华
网站建设 2026/9/9 1:19:20

开源AI Agent平台选型指南:10款工具对比与落地建议

前阵子和几个做企业服务的同行聊AI Agent,发现一个很有意思的分歧:销售那边觉得什么都能自动,研发这边觉得什么都别想自动。两边吵到后来,反而把真正的问题吵出来了——企业要的从来不是"有个Agent",而是某个…

作者头像 李华
网站建设 2026/9/9 1:18:52

Hadoop、Spark、Flink三者区别与实战踩坑总结

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/9 1:17:54

AI知识库权限穿透防护:企业RAG安全架构与敏感信息隔离实战

1. 从一次“可复现”的越权事故说起:权限穿透到底是怎么发生的 我参与过一家中型企业的AI知识库改造项目,前期规划做得漂漂亮亮,文档接入、向量化、检索问答都跑通了,结果在上线前内部安全测试时出了大问题。测试账号是一个普通实…

作者头像 李华
网站建设 2026/9/9 1:07:58

全民健身解决方案系统源码实战指南:从架构设计到部署全流程解析

全民健身解决方案系统源码实战指南:从架构设计到部署全流程解析 近年来,全民健身信息化建设进入快车道,社区健身房、企业运动空间、校园体育场馆都在寻求数字化升级。全民健身解决方案系统源码并非单一产品,而是一整套覆盖多端场景…

作者头像 李华
网站建设 2026/9/9 1:06:15

VS Code AI Chat 实战指南:从 Copilot 到本地大模型接入

“VS Code 的 AI Chat 现在已经这么能干了?”前几天一个做后端的朋友在群里扔了这么一句话,配图是他用编辑器里那个 AI 聊天窗,把一个三百行的爬虫脚本拆成了七个模块,还顺手补了一组 pytest。我回了一句:你这才哪到哪…

作者头像 李华