Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

400
Views
NodeJS --> SyntaxError: no se puede usar la declaración de importación fuera de un módulo

Soy un principiante en NodeJS. Estaba tratando de importar un módulo fs.readFileSync . Usé import { readFileSync } de 'fs' según los documentos de NodeJS, pero sigo recibiendo el siguiente error:

ERROR ----->> SyntaxError: Cannot use import statement outside a module

Mi investigación

-> Descubrí que agregar type:module en el archivo package.json resuelve este problema.

Mi duda

->Quiero saber por qué esto no se puede importar según la documentación.

Código

 import { readFileSync } from 'fs'; fs.writeFileSync('notes.txt','This was read by NodeJS')

Error completo

 SyntaxError: Cannot use import statement outside a module at Object.compileFunction (node:vm:352:18) at wrapSafe (node:internal/modules/cjs/loader:1031:15) at Module._compile (node:internal/modules/cjs/loader:1065:27) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10) at Module.load (node:internal/modules/cjs/loader:981:32) at Function.Module._load (node:internal/modules/cjs/loader:822:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) at node:internal/main/run_main_module:17:47
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

De forma predeterminada, para un archivo .js , nodejs primero busca en el archivo package.json el tipo de módulo. Si no se encuentra ningún tipo de módulo allí, entonces pasa por la extensión de archivo del archivo. Es un archivo .js , luego asume que es un módulo CommonJS (donde usa require() , no import ). Si es un archivo .mjs , entonces asume que es un archivo ESM (donde usa import ).

Como descubrió, puede anular el manejo de las extensiones de archivo especificando el type como module en el archivo package.json para que los archivos .js puedan usar import .

Puede indicar en su seguimiento de pila que la carga del archivo se realiza mediante: internal/modules/cjs/loader donde cjs significa CommonJS , por lo que definitivamente está tratando de cargar el archivo como un módulo CommonJS.


Si se pregunta por qué las cosas están configuradas de esta manera, es por el historial de nodejs. Originalmente, todo lo que había eran archivos CommonJS: ese fue el único tipo de módulo durante muchos años. Entonces, para compatibilidad con versiones anteriores, si no se especifica ningún tipo de módulo en el archivo package.json o a través de una extensión de archivo especial, entonces nodejs asume un archivo CommonJS para que siga siendo compatible con módulos más antiguos que no saben nada sobre el módulo más nuevo. tipos

En cuanto a por qué no puede usar la import en archivos CommonJS, esta fue claramente una decisión que los arquitectos de nodejs probablemente consideraron cuidadosamente. El desafío es que algunas partes de la especificación del módulo ESM son incompatibles con algunas cosas en el formato del módulo CommonJS. Entonces, en lugar de intentar meter las funciones de ambos módulos en un solo formato, decidieron tener dos formatos completamente separados. Esto evita conflictos entre las dos arquitecturas, pero crea esta necesidad de averiguar qué tipo de módulo se está utilizando.


Aquí está la documentación de nodejs sobre cómo nodejs elige un tipo de módulo:

https://nodejs.org/api/packages.html#determining-module-system

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!