A veces no necesitas un framework entero para un poco de interactividad. Quieres algo de JS para "cuando se haga click en este botón, abre este menú", "valida este input", "haz toggle a esa clase". Para eso, los archivos .astro aceptan etiquetas <script>.
<script> normal y corrienteLo que está dentro de <script> se envía al navegador y se ejecuta una vez la página se carga.
Por defecto, Astro:
<script>, no se descarga dos veces.Astro instala/empaqueta motion automáticamente.
Puedes desactivar el procesamiento si quieres dejar un script tal cual:
is:inline → no lo procesa, no lo bundlea.define:vars={{ foo: "bar" }} → inyecta variables del frontmatter como globales del script.Si un componente tiene un <script> y lo usas dos veces en una página, el script solo se ejecuta una vez (Astro lo deduplica). No es un script "por instancia": es un script "por componente". Si necesitas lógica para cada instancia, busca elementos con querySelectorAll y aplica el comportamiento a cada uno.
<script> y cuándo una isla?Una guía rápida:
<script>. Es liviano y barato.client:*).No te obsesiones: muchas webs profesionales mezclan los dos.
Abre src/pages/index.astro. Verás un <button id="saludar">.
<script>...</script> en el archivo.document.querySelector("#saludar") (o getElementById) para encontrar el botón.addEventListener("click", ...) para escuchar el click.alert("Hola!") (o el mensaje que prefieras).Si todo va bien, al hacer click verás el alert. Acabas de añadir interactividad sin frameworks y sin pagar coste de runtime.