> ## Documentation Index
> Fetch the complete documentation index at: https://novita.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Conceptos

## Cómo funciona

A alto nivel, una compilación de plantilla funciona así:

1. Resuelve el origen de la plantilla, como una imagen base estándar, una imagen existente, un Dockerfile u otra plantilla.
2. Aplica instrucciones de plantilla como `runCmd`, `copy`, `makeDir`, `setEnvs` y ayudantes para instalar paquetes.
3. Si está configurado, inicia el comando de inicio de la plantilla.
4. Espera hasta que el [comando de preparación](/docs/es/guides/sandbox-template-authoring#start--ready-commands) se complete correctamente.
5. Guarda el entorno preparado como una plantilla reutilizable.

La compilación produce un `templateId` / `template_id` y un `buildId` / `build_id`. Usa el ID de plantilla más adelante con `Sandbox.create(...)`.

## Usuario y directorio de trabajo

Las plantillas pueden establecer el usuario de Linux predeterminado y el directorio de trabajo que usarán los pasos de compilación posteriores y el entorno final.

Usa `setUser(...)` / `set_user(...)` cuando los comandos de compilación deban ejecutarse como un usuario específico. Usa `setWorkdir(...)` / `set_workdir(...)` cuando los comandos posteriores y los archivos copiados deban resolverse en relación con un directorio específico.

<CodeGroup>
  ```ts JavaScript & TypeScript icon="js" theme={"system"}
  import { Template } from "novita-sandbox"

  const template = Template()
    .fromUbuntuImage("24.04")
    .setUser("root")
    .setWorkdir("/app")
    .runCmd("apt-get update && apt-get install -y curl")
    .copy("package.json", "/app/package.json")
  ```

  ```python Python icon="python" theme={"system"}
  from novita_sandbox.core import Template

  template = (
      Template()
      .from_ubuntu_image("24.04")
      .set_user("root")
      .set_workdir("/app")
      .run_cmd("apt-get update && apt-get install -y curl")
      .copy("package.json", "/app/package.json")
  )
  ```
</CodeGroup>

Si no estableces estos valores, el sandbox usa los valores predeterminados de la imagen base seleccionada.

## Caché

Las compilaciones de plantillas almacenan en caché las capas completadas previamente, de modo que las compilaciones repetidas no tengan que volver a ejecutar cada instrucción.

Esto suele ser lo que quieres para iterar rápidamente. Cuando necesites una compilación completamente nueva, desactiva la caché para toda la compilación con `skipCache: true` / `skip_cache=True`, o marca la cadena de plantillas con `skipCache()` / `skip_cache()`.

<CodeGroup>
  ```ts JavaScript & TypeScript icon="js" theme={"system"}
  import { Template } from "novita-sandbox"

  const template = Template()
    .fromPythonImage("3.12")
    .skipCache()
    .runCmd("pip install -U pip")

  const build = await Template.build(template, "my-template-no-cache", {
    skipCache: true,
  })
  ```

  ```python Python icon="python" theme={"system"}
  from novita_sandbox.core import Template

  template = (
      Template()
      .from_python_image("3.12")
      .skip_cache()
      .run_cmd("pip install -U pip")
  )

  build = Template.build(
      template,
      "my-template-no-cache",
      skip_cache=True,
  )
  ```
</CodeGroup>

Usa la invalidación de caché de forma intencional. Ralentiza las compilaciones y normalmente debe reservarse para actualizar dependencias, depurar o realizar cambios en entradas que no son visibles solo a partir de la definición de la plantilla.
