es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo resolver el require() de los módulos ES no es compatible

Estoy tratando de usar la biblioteca “split-on-first” para un proyecto, pero no puedo importarla.

He convertido todo el proyecto a TypeScript y cambié esta línea para usar “import” en lugar de “require”.

import splitOnFirst from 'split-on-first';

Sin embargo, cuando intento ejecutar mis pruebas unitarias, todavía recibo este error:

Error [ERR_REQUIRE_ESM]: Debe usar "import" para cargar un Módulo ES: <project>/node_modules/split-on-first/index.js
La función require() no es compatible con los módulos ES.
El require() de <project>/node_modules/split-on-first/index.js desde <project>/helpers/fileReview.ts es un archivo de módulo ES, ya que es un archivo .js cuyo package.json padre más cercano contiene "type": "module", lo que define todos los archivos .js en ese alcance de paquete como módulos ES.
En su lugar, cambie el nombre de index.js para que termine en .cjs, cambie el código que lo requiere para usar import(), o elimine "type": "module" de <project>/node_modules/split-on-first/package.json.

Mi tsconfig.json:

{
  "compilerOptions": {
    "esModuleInterop": true,
    "lib": [
      "es2019"
    ],
    "module": "CommonJS",
    "skipLibCheck": true,
    "target": "ES2017",
    "noImplicitAny": true,
    "preserveConstEnums": true,
    "outDir": "./build",
    "sourceMap": true,
    "baseUrl": "./",
    "strict": true
  },
  "include": ["./**/*"],
  "exclude": ["**/*.spec.ts"]
}

Ejecuto las pruebas unitarias a través de package.json: nyc mocha './tests/**/*.test.ts'

¿Qué estoy haciendo mal? ¡Cualquier ayuda es muy apreciada!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que la biblioteca split-on-first es un módulo de ECMAScript (ES) y no se puede importar usando require(). Para usar un módulo de ES en un entorno de CommonJS (que es lo que utiliza Node.js), debes usar la declaración import en su lugar.

    Dado que ya has convertido el proyecto a TypeScript y cambiado la declaración de importación de split-on-first para usar import, es posible que el problema esté relacionado con la biblioteca misma en lugar de tu código.

    El error sugiere que el package.json padre más cercano de la biblioteca contiene "type": "module", lo que significa que todos los archivos .js en ese paquete se consideran módulos de ES. Sin embargo, dado que Node.js empezó a admitir módulos de ES a partir de la versión 13, es posible que necesites utilizar una solución alternativa para cargar la biblioteca.

    Una solución alternativa es agregar "type": "commonjs" al package.json de la biblioteca. Otra opción es utilizar la bandera --experimental-modules al ejecutar Node.js, pero esto no se recomienda para uso en producción.

    Si ninguna de estas soluciones funciona, es posible que necesites buscar una biblioteca alternativa que funcione con CommonJS o verificar si la biblioteca proporciona instrucciones para su uso con TypeScript o CommonJS.

Comments are closed.