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

在本地运行 Context Engineering

使用本页面运行你从 Context Engineering 模块中提取的总结任务。项目下载后即可安装,但有两个文件读取 OpenRouter 设置的方式只在 Scrimba 上有效,你需要为 Vite 修改这些读取方式,并在应用能够回答问题之前添加你的密钥。

你需要的准备

安装 Node.js 24(推荐的 LTS 版本),它包含 npm。Node 22.12 或更新的版本也可以。项目运行在 Vite 7 上,不支持更旧的 Node 版本。

检查这两个命令是否都输出版本号:

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

如果任一命令显示"command not found",请先完成 Node 的安装再继续。如果 node --version 输出的版本低于 v22.12.0,先安装 Node 24,因为项目的 Vite 版本不支持它。

你还需要一个 OpenRouter API 密钥和你的账户可以使用的模型 ID。创建一个设置了低消费限额的临时密钥:这个学习项目从浏览器发送供应商请求,所以密钥会随每个请求传输。

Juno你需要的准备 安装 Node.js 24,并检查 node --versionnpm --version 是否都输出数字。从 v22.12.0 及以上版本都可以。

然后创建一个设置了低消费限额的临时 OpenRouter 密钥,并记下你的账户可以使用的模型 ID。

Juno你需要的准备 Vite 7 将 Node 的最低版本设为 20.19 或 22.12,而 Node 20 已停止维护,所以 22.12 是实际的最低版本。

每次供应商请求都会从浏览器发送你的 OpenRouter 密钥,所以要保持该密钥临时且受限。在 OpenRouter 仪表板中时,确认你的账户可以使用该模型 ID;这样可以避免之后出现令人困惑的 404 错误。

Juno你需要的准备 供应商调用在客户端代码中运行,所以浏览器以及任何打开开发者工具的人都能看到你的 OpenRouter 密钥。

这里使用一个有低限额的受限学习密钥,在项目部署之前将供应商调用移至后端。

打开并安装项目

在提取的文件夹(包含 package.json 的文件夹)中打开终端,然后完全按照锁文件的记录安装包:

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

完成后,package.json 旁会出现一个 node_modules 文件夹。保持 package-lock.json 不变。如果 npm 报告审计发现,在检查改动之前不要运行 npm audit fix --force;该命令可能会将课程依赖跨越主版本号移动。

Juno打开并安装项目 在提取的文件夹(包含 package.json 的文件夹)中运行 npm cinode_modules 文件夹应该会出现。

不要修改锁文件:它列出了这门课程录制时使用的确切包版本。

Juno打开并安装项目 使用 npm ci 是因为下载的文件包含锁文件,ci 会安装它记录的确切内容。

审计警告不是理由强制更新课程项目中的主要依赖;你只是在用警告换取一个损坏的项目。

Juno打开并安装项目 在修改环境读取时保持锁文件固定。如果在同一步骤中升级依赖,你就无法判断 Vite 编辑是否有效或升级是否破坏了其他东西。

修复环境变量

在 Scrimba 上,项目通过 process.env 读取其密钥和模型。在 Vite 开发服务器下运行的浏览器项目中,process 不存在,所以这些读取需要改变。

main.jsutils.js 中搜索这些值:

js
process.env.OPENROUTER_KEY
process.env.MODEL_ID

将每个出现的位置替换为:

js
import.meta.env.VITE_OPENROUTER_KEY
import.meta.env.VITE_MODEL_ID

如果漏掉一个,应用稍后会在浏览器中失败,显示 process is not defined,所以要在两个文件中搜索,直到都不包含 process.env

package.json 旁创建 .env

dotenv
VITE_OPENROUTER_KEY=your-openrouter-key
VITE_MODEL_ID=a-current-model-id-from-openrouter

使用当前在你的 OpenRouter 账户中可用且支持课程中所做调用的模型;供应商目录会变化。Vite 启动时会读取 .env,所以编辑该文件后要重启开发服务器。

.env 旁创建 .gitignore 以确保密钥永远不会进入 Git:

txt
.env
node_modules/
dist/

Git 手册在 忽略文件和好习惯 中介绍了这个习惯。

OpenRouter 密钥在浏览器中可见

每个 VITE_ 值都会被包含在客户端代码中。这里使用临时学习密钥,设置低消费限额,不要发布此项目。部署版本必须从后端调用供应商。

Juno修复环境变量main.jsutils.js 中,将两个 process.env 读取替换为相应的 import.meta.env.VITE_ 名称。然后使用你的密钥和模型 ID 创建 .env,并添加 .gitignore

这里使用临时 OpenRouter 密钥:浏览器项目会向任何查看的人显示该密钥。

Juno修复环境变量 Vite 通过 import.meta.env 向客户端代码公开 .env 值,但仅限于以 VITE_ 开头的名称。这就是为什么两个源文件都需要直接读取。

正是这个前缀导致凭证被暴露而不是受保护:对你的代码可用意味着对浏览器也可用。

Juno修复环境变量 下载的 vite.config.js 注入了旧的 process.env 值,生产构建会应用这些值,但开发转换会将它们留在浏览器模块中。直接读取 import.meta.env.VITE_... 在两种情况下都有效。

Vite 将这些值代入它提供的代码,所以你可以通过在加载的源代码或网络标签中的请求的 Authorization 头中找到密钥的纯文本形式来确认修复。这个可读的密钥也是将调用移至服务器的理由。

运行并检查项目

启动开发服务器:

bash
$ npm start

打开 Vite 输出的 Local URL,然后继续对话,直到项目总结其之前的消息。在运行的应用中出现新摘要是密钥和模型有效的可见证明。页面可以在任何 OpenRouter 请求成功之前打开,所以打开页面本身并不能证明设置正确。

用 Ctrl+C 停止服务器。在修改 .env 后,用 npm start 重新启动它,以便 Vite 读取新的值。

Juno运行并检查项目 运行 npm start,打开 Vite 输出的 Local URL,然后聊天直到应用总结其之前的消息。这个总结就是你的 OpenRouter 设置有效的证明。

完成后用 Ctrl+C 停止服务器。

Juno运行并检查项目 页面可以在任何供应商请求成功之前打开,所以运行总结流程作为真正的检查。

如果修改的环境值没有显示,重启 Vite:它在启动时读取 .env

Juno运行并检查项目 Vite 顺利启动只证明了编辑的源代码能编译。成功的总结是另一个独立的检查,确认 OpenRouter 接受你的密钥和模型,并返回项目能使用的响应。

这是两个不同的故障点,所以要分别测试它们。

故障排除

process is not defined 至少有一个环境读取仍然在 main.jsutils.js 中。搜索两个文件,不仅仅是 Vite 配置。

密钥仍然是 undefined: 确认 .env 和代码中 VITE_ 的拼写,把 .env 放在 package.json 旁,并重启 Vite。

模型返回 404 或访问错误: 在浏览器开发者工具中阅读 OpenRouter 错误:401 指向密钥,404 指向模型 ID,429 指向速率限制。从 OpenRouter 复制当前的模型 ID,并确认你的账户可以使用它。

对话进行到很长时才出现问题: 这是该课程探索的行为。在查看供应商之前,确认你的编辑没有改变令牌阈值、总结提示或课程随附的示例对话数据。

Juno故障排除 在两个 JavaScript 文件中搜索遗留的 process.env 读取,然后检查 .env 中两个 VITE_ 的拼写并重启。

长对话触发总结是课程正常工作,不是破损。

Juno故障排除 区分缺失的 Vite 替换与供应商或模型错误:process is not defined 或 undefined 密钥是本地问题,而状态代码来自 OpenRouter。

如果只有长对话失败,在修改本地设置之前确认课程的上下文阈值和提示。

Juno故障排除 在改变任何东西之前阅读 OpenRouter 错误:401 是密钥,404 是模型 ID,429 是速率限制,每个都有不同的修复方法。

只有在请求成功后,才应该检查应用的总结阈值和提示,即使这样也要保持随附的对话数据不变。