Inicio·Mensajes de error

node · JavaScript

El mensaje

SyntaxError: Cannot use import statement outside a module

Qué significa

Node o el navegador leyeron ese archivo como un script CommonJS, y dentro había la palabra clave ESM import. Un archivo .js es CommonJS salvo que package.json diga lo contrario, y en el navegador ocurre lo mismo cuando la etiqueta <script> no lleva type="module". npm pkg set type=module declara todo el paquete como ESM y lo resuelve, pero desde ese momento cada .js del paquete pierde require y __dirname, así que los archivos CommonJS restantes también tienen que migrar; si solo quieres convertir un archivo, renombrarlo a .mjs es el cambio más estrecho y seguro.

El arreglo

npm pkg set type=module
Lo imprime
node
JavaScript
15

Los errores del navegador y de Node suelen decirte qué se rompió y no por qué el valor llegó a ser así —leíste undefined, no era una función, no era JSON—, así que el lugar del arreglo está aguas arriba de la línea que lanzó el error, y silenciar solo esa línea con ?. y valores por defecto hace que el mismo problema reaparezca más lejos y con una forma más difícil de reconocer.

Cómo leer un mensaje de error

  • Lee desde la primera línea. Cuanto más abajo, más son las tripas de la herramienta; la causa suele estar arriba.
  • Si hay un archivo y un número de línea, empieza ahí: no el marco superior de la pila, sino la línea más alta que nombre un archivo tuyo.
  • Busca el mensaje literal, pero quita antes tus rutas y nombres de variables: eso es lo que impide que la búsqueda coincida.
  • La misma condición se redacta distinto según la versión. Si los resultados no cuadran, añade el número de versión.
  • Antes de pegar un arreglo, comprueba qué descarta. Algunos no se pueden deshacer.

Preguntas frecuentes

Q. ¿Qué significa «SyntaxError: Cannot use import statement outside a module»?

Node o el navegador leyeron ese archivo como un script CommonJS, y dentro había la palabra clave ESM import. Un archivo .js es CommonJS salvo que package.json diga lo contrario, y en el navegador ocurre lo mismo cuando la etiqueta <script> no lleva type="module". npm pkg set type=module declara todo el paquete como ESM y lo resuelve, pero desde ese momento cada .js del paquete pierde require y __dirname, así que los archivos CommonJS restantes también tienen que migrar; si solo quieres convertir un archivo, renombrarlo a .mjs es el cambio más estrecho y seguro.

Q. ¿Cómo se arregla?

npm pkg set type=module — antes de ejecutarlo, mira arriba qué descarta este comando.

Q. ¿Qué herramienta lo imprime?

node. Está en JavaScript y el mensaje tiene 8 palabras.

Errores cercanos