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

Ejecutar Chef Claude localmente ​

Usa esta página para ejecutar el proyecto extraído de la receta Chef Claude desde Learn React en tu computadora y obtener una receta con tu propia clave de Anthropic. Tres cosas difieren del editor de Scrimba: la instalación necesita un flag extra, las lecturas de clave en ai.js necesitan la sintaxis de Vite, y el modelo de Anthropic que el proyecto nombra ha sido retirado. Si la parte de React del proyecto es nueva para ti, el manual de React comienza desde el principio.

Qué necesitas primero ​

Instala una versión LTS compatible de Node.js. Se recomienda Node 24 e incluye npm.

Verifica que ambos comandos funcionen. Tus números de versión pueden ser diferentes:

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

También necesitas una clave de API de Anthropic, porque la app solicita recetas a Anthropic. Crea una clave que eliminarás cuando termines, y establece un límite de gasto mensual bajo en la Consola de Anthropic: este proyecto llama a Anthropic directamente desde el navegador, así que la clave termina en la página.

JunoQué necesitas primero Instala la versión LTS de Node.js, que incluye npm, y verifica que node --version y npm --version ambos impriman una versión.

Luego crea una clave de API de Anthropic y establece un límite de gasto bajo en tu cuenta. Esa única clave es todo lo que este proyecto necesita.

JunoQué necesitas primeroai.js construye el cliente de Anthropic tan pronto como la página carga, pero no envía nada hasta que hagas clic en Obtener una receta. Así que la página puede verse bien con una clave incorrecta; solo una receta te dirá que la clave funciona.
JunoQué necesitas primero El cliente de Anthropic se crea con dangerouslyAllowBrowser: true, que es la propia advertencia del SDK de que la clave viaja con la página.

Instala los paquetes ​

Abre una terminal en la carpeta extraída de Chef Claude. Es la que contiene package.json y ai.js:

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

Un simple npm install se detiene aquí con un error ERESOLVE, porque el proyecto usa una versión preliminar de React 19 que uno de sus paquetes no acepta. Agrega un flag en su lugar:

bash
$ npm install --legacy-peer-deps

npm termina reportando cuántos paquetes agregó.

JunoInstala los paquetes Abre la terminal en la carpeta que contiene package.json, luego ejecuta npm install --legacy-peer-deps. npm termina diciendo cuántos paquetes agregó.

El flag suena como una advertencia, pero es la instalación correcta para este proyecto. Si npm dice que no puede encontrar package.json, estás en la carpeta equivocada.

JunoInstala los paquetesreact-markdown 9.0.1, que renderiza la receta, solicita react 18 o más nuevo, y npm trata 19.0.0-rc como fuera de ese rango. El flag permite que npm instale las versiones de React y react-markdown que el curso fijó en lugar de rechazar todo el árbol.
JunoInstala los paquetes--legacy-peer-deps omite la aplicación de dependencias peer que npm ha usado desde la versión 7. No actualices o reemplaces los paquetes de React en su lugar, porque eso te da un proyecto diferente al del curso.

Cambia tres líneas en ai.js ​

El editor de Scrimba llena process.env.ANTHROPIC_API_KEY y process.env.HF_ACCESS_TOKEN por ti. El navegador no tiene process, y Vite no crea uno, así que ambas lecturas deben cambiar, incluso la de Hugging Face que la app nunca llama: ai.js ejecuta ambas tan pronto como carga.

Abre ai.js y cambia el valor de Anthropic de:

js
apiKey: process.env.ANTHROPIC_API_KEY,

a:

js
apiKey: import.meta.env.VITE_ANTHROPIC_API_KEY,

Cambia el valor de Hugging Face de:

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

a:

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

Vite entrega al código del navegador solo las variables cuyos nombres comienzan con VITE_, es por eso que ambos nombres ganan ese prefijo.

La tercera línea es el modelo. En la función getRecipeFromChefClaude, el proyecto solicita claude-3-haiku-20240307, que Anthropic ha retirado. Cambia:

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

al reemplazo nombrado de Anthropic:

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

El resto de la solicitud permanece como el curso lo escribió.

JunoCambia tres líneas en ai.js En ai.js, cambia ambas lecturas de clave a las formas import.meta.env, luego cambia el nombre del modelo.

Cambia ambas lecturas aunque la app solo use Anthropic; una lectura antigua dejada atrás es suficiente para que la página se quede en blanco.

JunoCambia tres líneas en ai.js Cuando Vite inicia, reemplaza cada lectura de import.meta.env.VITE_... con el valor de .env. Un nombre sin el prefijo está oculto del código del navegador, así que un prefijo faltante aparece como una clave undefined, no como un error al inicio.
JunoCambia tres líneas en ai.js Un process.env rezagado lanza mientras ai.js aún está cargando, antes de que React dibuje cualquier cosa, es por eso que toda la página se queda en blanco en lugar de solo fallar la receta.

Agrega tu clave a .env ​

Crea .env junto a package.json y coloca tu clave en él:

dotenv
VITE_ANTHROPIC_API_KEY=your-anthropic-key-here

Crea .gitignore junto a package.json y agrega:

txt
.env
node_modules/

Una clave que llega a un repositorio de Git permanece en su historial incluso después de que elimines el archivo. El manual de Git cubre el hábito en ignorar archivos y buenas prácticas.

Esta clave es visible en el navegador

Vite escribe cada valor de VITE_ en el código que envía al navegador, así que cualquiera que abra esta página puede leer tu clave. Mantén esta versión en tu propia computadora: nunca la implementes ni la compartas, y nunca hagas commit de .env. Una versión que publiques necesita un backend o función serverless que mantenga la clave en el servidor.

JunoAgrega tu clave a .env Haz un archivo llamado .env junto a package.json con tu clave en una línea, luego lista .env en .gitignore para que Git nunca lo guarde.
JunoAgrega tu clave a .env Vite lee .env cuando inicia y lo observa después. Guarda un cambio y la terminal dice .env changed, restarting server, así que la siguiente solicitud usa el nuevo valor sin que detengas nada.
JunoAgrega tu clave a .env El prefijo VITE_ es una lista blanca de exposición, no almacenamiento secreto: la clave se encuentra en el módulo que Vite sirve y en el encabezado de cada solicitud que el navegador envía a Anthropic.

Inicia la app y obtén una receta ​

Inicia el servidor de desarrollo:

bash
$ npm start

Vite puede imprimir primero una advertencia que comience con (!) Your Vite config uses features. No detiene la app. Debajo de ella, Vite imprime la dirección para abrir:

text
  VITE v8.3.4  ready in 92 ms

  ➜  Local:   http://localhost:5173/

Abre la dirección exacta de Local. La página comienza con cinco ingredientes ya listados, así que Obtener una receta se muestra de inmediato. Haz clic en él y espera unos segundos: la página no muestra progreso mientras Anthropic escribe. Una receta bajo Chef Claude Recomienda significa que tu clave y el modelo funcionan.

Si nada aparece después de unos 20 segundos, abre las herramientas de desarrollador de tu navegador (F12, o Cmd+Option+J en Chrome en una Mac) y lee la pestaña Console. La razón se imprime allí, no en la página; la solución de problemas abajo coincide con cada mensaje.

Detén el proyecto con Ctrl+C. No necesitas reiniciarlo después de editar .env: Vite nota el cambio y se reinicia a sí mismo.

JunoInicia la app y obtén una receta Ejecuta npm start, ignora la advertencia de config si aparece, y abre la dirección Local. Haz clic en Obtener una receta y espera unos segundos.

Si no aparece ninguna receta, abre la Console en las herramientas de desarrollador de tu navegador y busca la primera línea roja.

JunoInicia la app y obtén una receta Que la página se abra solo prueba que Vite y React funcionan. La receta necesita que una solicitud de tu navegador a Anthropic tenga éxito, así que una página sin receta es una pregunta de clave, cuenta o modelo, no de compilación.
JunoInicia la app y obtén una recetagetRecipe espera la llamada de Anthropic sin try/catch, así que una solicitud rechazada se convierte en un rechazo de promesa no capturado en la consola y el estado de la receta nunca cambia. Es por eso que los fallos son silenciosos en la página.

Solución de problemas ​

ERESOLVE unable to resolve dependency tree: Ejecuta npm install --legacy-peer-deps en su lugar. No elimines ni reemplaces los paquetes de React para pasar la instalación.

La página está en blanco, y la consola dice process is not defined: Todavía hay una lectura de process.env en ai.js. Reemplaza ambas con las formas import.meta.env.VITE_... mostradas arriba y guarda el archivo.

Nada sucede después de Obtener una receta, y la consola dice Could not resolve authentication method: El navegador no tiene clave. Verifica que .env esté junto a package.json y que el nombre sea exactamente VITE_ANTHROPIC_API_KEY, guarda el archivo, y haz clic en Obtener una receta de nuevo una vez que Vite diga que se reinició.

La consola muestra 401 con invalid x-api-key: La clave llegó, pero Anthropic no la aceptó. Cópiala de nuevo desde tu cuenta de Anthropic y verifica que no haya sido eliminada.

La consola dice que tu saldo de crédito es muy bajo: La clave funciona, pero la cuenta no tiene crédito para gastar. Agrega crédito bajo Billing en la Consola de Anthropic, luego haz clic en Obtener una receta de nuevo.

La consola dice que el modelo no se encontró: Verifica que ai.js solicite claude-haiku-4-5-20251001, no claude-3-haiku-20240307. Si Anthropic luego retira ese modelo también, usa el reemplazo que su página de deprecaciones de modelos nombra.

JunoSolución de problemas Encuentra la primera línea roja en la Console y coincídela con un encabezado en negrita arriba. Una página en blanco significa que todavía hay una lectura de process.env en ai.js.
JunoSolución de problemas Mantén tres problemas separados: la verificación de dependencias peer de npm, el reemplazo de clave de Vite, y Anthropic aceptando la clave, la cuenta y el modelo. Fallan en ese orden, y cada uno muestra su error en un lugar diferente.
JunoSolución de problemas Un 401 significa que la solicitud llegó a Anthropic con una clave que rechazó, así que el reemplazo de Vite funcionó. Una clave undefined no le da al SDK nada que enviar, así que lanza antes de que cualquier solicitud salga del navegador.
Toma Learn React en ScrimbaChef Claude es uno de los proyectos que construyes en el curso Learn React gratuito de Scrimba.