Skip to content
This page has been auto-translated and may contain errors.View in English

本地运行 Chef Claude

使用本页在你的计算机上运行从 Learn React 中提取的 Chef Claude 食谱项目。你需要适配其 Vite 应用使用的提供商密钥、安装它声明的较早版本 React 依赖,并在本地生成食谱。如果你对项目中的 React 部分还不熟悉,React 手册会从头开始讲起。

你需要先准备的东西

安装受支持的 Node.js LTS 版本。推荐使用 Node 24,它包含 npm。

检查这两个命令都能正常运行:

bash
$ node --version
v24.18.0
$ npm --version
11.18.0

你还需要用于选定提供商的 API 密钥。课程代码包含 Anthropic 路由和 Hugging Face 路由。提供商的注册流程、模型可用性和价格可能会有变化,所以参考提供商当前的账户说明。无论选择哪个路由,都要使用临时密钥并设置较低的支出限制;这个项目从浏览器代码中调用提供商。

Juno你需要先准备的东西 安装包含 npm 的 Node.js LTS 版本,并为你计划使用的提供商路由获取一个密钥。使用临时密钥并设置较低的支出限制,因为这个项目直接从浏览器调用提供商。设置支出限制只需一分钟,它已经救我摆脱自己的输入错误好多次了!
Juno你需要先准备的东西 在配置凭证之前,先选择 Anthropic 或 Hugging Face 路由;只有当你计划同时运行两个实现时才需要两个密钥。注册流程、模型可用性和价格会随时间变化,所以相信提供商当前的说明而不是教程录制。先决定路由意味着你只需设置一个凭证而不是两个。
Juno你需要先准备的东西 这是一个具有两个可选提供商客户端的 Vite 和 React 项目,即使密钥是占位符,页面也能正常启动和显示。渲染的食谱是唯一真正的证明:有效的密钥、活跃的账户、可用的模型。这三个可能会独立失败,虽然很少在同一天发生。

打开项目文件夹

在包含 package.json 的提取出的 Chef Claude 文件夹中打开一个终端:

bash
$ cd path-to-your-downloaded-project

在运行任何东西之前,打开 package.json。它的 scripts 块显示项目期望的命令,dependencies 记录了这个快照构建时使用的确切 React 和提供商包版本。

Juno打开项目文件夹 在包含 package.json 的提取出的文件夹中工作;本页上的每个命令和文件都在那里。如果某个命令报告文件丢失,在改变其他任何东西之前,先检查终端在哪个文件夹中。当我刚开始时,由于文件夹错误导致的错误让我卡了好几个小时!
Juno打开项目文件夹 这个项目使用 npm 和 Vite 运行。它提取出的提供商调用仍然期望 Scrimba 的环境变量,你在下一部分会改变它们;在此之前,代码从一个仅存在于 Scrimba 编辑器内部的环境中读取密钥。
Juno打开项目文件夹 改变任何文件之前,先读一下 package.jsonscriptsnpm start 解析成的内容,dependencies 记录了这个快照构建时使用的确切版本,包括 React 预发布版本。这三十秒的阅读会预示安装标志和提供商密钥,避免两者都让你感到惊讶。我大约每年跳过一次,然后十分钟后就开始后悔了。

让环境变量在 Vite 中工作

Scrimba 的编辑器理解 process.env.ANTHROPIC_API_KEYprocess.env.HF_ACCESS_TOKEN。本地 Vite 应用不在浏览器中提供那个 process.env 对象。

打开 ai.js 并将 Anthropic 值从:

js
apiKey: process.env.ANTHROPIC_API_KEY,

改为:

js
apiKey: import.meta.env.VITE_ANTHROPIC_API_KEY,

将 Hugging Face 值从:

js
const hf = new HfInference(process.env.HF_ACCESS_TOKEN)

改为:

js
const hf = new HfInference(import.meta.env.VITE_HF_ACCESS_TOKEN)

VITE_ 前缀是必需的,因为 Vite 只向浏览器代码公开特殊前缀的环境变量。

替换已停用的 Anthropic 模型

下载的 Anthropic 函数使用已停用的模型 claude-3-haiku-20240307。在 getRecipeFromChefClaude 函数中,将:

js
model: "claude-3-haiku-20240307",

改为 Anthropic 文档中的替代品:

js
model: "claude-haiku-4-5-20251001",

课程请求的其余部分可以保持不变。

将你的密钥添加到 .env

package.json 旁创建 .env。添加你使用的路由的值:

dotenv
VITE_ANTHROPIC_API_KEY=your-anthropic-key-here
VITE_HF_ACCESS_TOKEN=your-hugging-face-token-here

你可以省略未使用的值。项目默认调用 getRecipeFromChefClaude,所以如果你保持该函数不变,你需要 Anthropic 值和上面的模型更改。要使用 Hugging Face 路由(调用 Mistral 模型),请遵循课程的提供商切换课程并确认其 Hugging Face 模型仍然可用。

package.json 旁创建 .gitignore 并添加:

txt
.env
node_modules/

.env 排除在 Git 之外的重要性与下面警告中描述的浏览器暴露一样大,因为到达存储库历史的密钥即使在你删除文件后仍会留在那里。Git 手册在忽略文件和良好习惯中涵盖了更广泛的做法。

这些密钥在浏览器中是可见的

VITE_ 前缀有意将每个值放入前端 bundle 中。仅在本地学习时使用临时的、受限制的凭证。不要部署或共享这个版本,不要提交 .env。生产版本需要一个后端或无服务器函数来在服务器上保持提供商凭证。

Juno让环境变量在 Vite 中工作 更改 ai.js 中的密钥读取和已停用的 Anthropic 模型,将你使用的密钥添加到 .env,并将该文件排除在 Git 之外。密钥在浏览器中仍然是可见的。
Juno让环境变量在 Vite 中工作 Vite 客户端代码读取 import.meta.env 并只公开前缀值。配置与应用调用的提供商函数匹配的变量,并对默认 Anthropic 路由使用当前的 Haiku 替代品。
Juno让环境变量在 Vite 中工作VITE_ 前缀是一个暴露允许列表,不是秘密存储。可部署的版本会将提供商流量移到服务器边界之后。

安装并运行项目

提取的项目使用 React 19 的预发布版本,同时配合一个对等范围不接受该预发布版本的依赖。因此普通的 npm install 会因 ERESOLVE 错误而停止。使用宽松的对等检查来安装这个课程快照:

bash
$ npm install --legacy-peer-deps
$ npm start

Vite 会打印一个类似于以下的本地地址:

text
  VITE ready

  Local: http://localhost:5173/

打开确切的 Local URL。如果 5173 被占用,Vite 会选择另一个端口并打印它。添加足够的材料来请求一个食谱。渲染的食谱确认两件事:本地页面工作,以及选定的提供商密钥和模型工作。使用 Ctrl+C 停止项目。

修改 .env 后重启 Vite。

Juno安装并运行项目 运行 npm install --legacy-peer-deps,然后 npm start 并打开它打印的 Local URL。当你想停止时按 Ctrl+C。这个标志听起来像一个警告,对这个项目来说它仍然是正确的选择,所以使用它而不用担心你破坏了什么。
Juno安装并运行项目 宽松的对等检查处理已知的 React 预发布版本不匹配,而不替换课程依赖。在每次 .env 更改后重启服务器,因为 Vite 在启动时读取这些值。
Juno安装并运行项目--legacy-peer-deps 跳过 npm 从版本 7 开始默认应用的对等依赖范围强制,改为按写入的方式安装依赖树。对于固定到 React 预发布版本的课程快照这是安全的,它也是隐藏项目维护中真实不兼容性的同一个标志,所以在这里使用它并在其他地方谨慎对待。

故障排除

ERESOLVE unable to resolve dependency tree 对于这个提取的项目,使用 npm install --legacy-peer-deps。不要删除或替换 React 包来越过安装。

process is not defined 一个或两个 Scrimba 风格的 process.env 值仍然在 ai.js 中。将它们替换为上面显示的 import.meta.env.VITE_... 形式,然后重启 Vite。

密钥是 undefined 或认证失败: 检查确切的 VITE_ 变量名,确保 .envpackage.json 旁边,并重启项目。确认凭证在提供商账户中是活跃的。

Anthropic 说模型未找到或已停用: 确认 ai.js 使用 claude-haiku-4-5-20251001,而不是 claude-3-haiku-20240307。如果 Anthropic 后来停用了替代品,使用其当前模型弃用文档中命名的继承者。

Hugging Face 拒绝 Mistral 模型: 确认 ai.js 中的模型通过连接到你账户的推理提供商可用。一个模型页面即使在不通过你选择的托管推理提供商可用时仍然可以保持可下载。

如果你想发布这个页面: 不要发布这个仅前端版本。先将 AI 请求和凭证移到后端。

Juno故障排除 当你看到 ERESOLVE 时使用安装标志,当你看到 process is not defined 时替换每个旧的密钥读取,并在编辑 .env 后重启项目。大多数这些错误在消息本身中描述了修复。改变任何东西前读完整个消息,这花了我太长时间才学会!
Juno故障排除 将对等依赖冲突、Vite 替换和提供商模型可用性分开。打开的页面仍然需要成功的提供商请求才能显示食谱,所以将空白结果视为提供商问题而不是构建问题。
Juno故障排除 分别检查安装、Vite 的密钥替换和提供商模型可用性,因为所有三个都可能导致页面加载但什么都不做。已停用的模型和被拒绝的密钥在界面中看起来相同,但在网络响应中差异很大。在你部署任何东西之前,将请求和密钥移到后端,因为前端代码中没有变量名能保持值的秘密。