En su lugar, cambie el requerimiento de index.js, a una importación dinámica () que está disponible en todos los módulos CommonJS

3 minutos de lectura

Avatar de usuario de Basse Nord
bajo norte

Al intentar trabajar con node/javascript/nfts, soy un novato y seguí un tutorial, pero aparece este error:

error [ERR_REQUIRE_ESM]: require() of ES Module [...] is not supported. Instead change the require of index.js [ in my file...]  to a dynamic import() which is available in all CommonJS modules

Tengo entendido que han actualizado el archivo de nodo, por lo que necesito un código diferente al del tutorial, pero no sé cuál se supone que debo cambiar, dónde y a qué. Por favor se tan especifico como puedas

const FormData = require('form-data');
const fetch = require('node-fetch');
const path = require("path")
const basePath = process.cwd();
const fs = require("fs");

fs.readdirSync(`${basePath}/build/images`).foreach(file).forEach(file => {
    const formData = new FormData();
    const fileStream = fs.createReadStream(`${basePath}/build/images/${file}`);
    formData.append('file',fileStream);

    let url="https://api.nftport.xyz/v0/files";

    let options = {
      method: 'POST',
      headers: {
        Authorization: '[...]',
      },
      body: formData
    };
    
    fetch(url, options)
      .then(res => res.json())
      .then(json => {
       const fileName = path.parse(json.file_name).name;
       let rawdata = fs.readFileSync(`${basePath}/build/json/${fileName}.json`);
       let metaData = JSON.parse(rawdata);

       metaData.file_url = json.ipfs_url;

       fs.writeFileSync(`${basePath}/build/json${fileName}.json`, JSON.stringify(metaData, null, 2));

       console.log(`${json.file_name} uploaded & ${fileName}.json updated!`);
      })
      .catch(err => console.error('error:' + err));
})

  • Hice npm i node-fetch@2.6.1, parece que lo arregló, luego escribí node utils/nftport/uploadFiles.js en la terminal (no conozco los términos correctos) y decía “el archivo no está definido” es estos problemas conectados? que mal hice

    – Bajo Norte

    31 de diciembre de 2021 a las 10:33

es debido a la node-fetch paquete. Como las versiones recientes de este paquete solo son compatibles con ESM, debe cambiarlo a una versión anterior. node-fetch@2.6.1 o bajo.

npm i node-fetch@2.6.1

Esto debería resolver el problema.

  • ¿Cómo sabes que este fue el error? Me estoy volviendo loco desde la última hora.

    – jeea

    8 jun a las 15:19

  • esta en la documentacion: npmjs.com/package/node-fetch#user-content-commonjsCommonJS node-fetch de v3 es un módulo exclusivo de ESM: no puede importarlo con require(). Si no puede cambiar a ESM, utilice v2, que sigue siendo compatible con CommonJS. Se seguirán publicando correcciones de errores críticos para v2. npm install node-fetch@2

    – PhilWilliammee

    31 oct a las 19:09


  • Las instrucciones de @PhilWilliammee son el camino a seguir como 2.6.1 tiene una advertencia de auditoría ahora.

    – Señor Rogers

    17 de noviembre a las 22:58

  • 2.6.7 también funciona, amigos

    – mikeDOTexe

    19 de noviembre a las 16:58

Avatar de usuario de Mona Thahmeen
Mona Thahmeen

Vaya a su archivo package.json y escriba

"type": "module",

por encima de la depuración.

y en lugar de escribir require('chalk') en el archivo js cámbielo a import chalk from 'chalk'

  • Esto no puede funcionar mixto ems npm deps y cmj npm deps.

    – JackChouMine

    8 abr a las 16:54

  • Sí, esto funcionará solo en algunas situaciones, en mi caso agregando "type": "module" solucionó este problema pero otras cosas se volvieron incompatibles

    – n1kk

    30 de mayo a las 11:06

Esto puede ocurrir cuando instala la última versión de un paquete que tiene un problema con la importación de módulos.

En mi caso, estaba recibiendo el error después de instalar la última versión de crypto-random-string paquete. Para saber qué paquete está causando este error, consulte el mensaje que precede al error anterior. En mi caso, se leía así:
error: uncaughtException: require() of ES Module /Users/myname/Documents/mydir/anotherdir/my-project/node_modules/crypto-random-string/index.js

Para solucionarlo, solo bajé a una versión anterior haciendo lo siguiente:

  1. yarn remove crypto-random-string
  2. yarn add crypto-random-string@3.3.1

Tuve este error en common.js en angular-devkit después de actualizar a angular 13. Descubrí que esto se perdió durante la actualización:

ng update no comprueba ni actualiza los paquetes de @angular-devkit

Me deshice de él usando:

ng update @angular-devkit/build-angular 

Avatar de usuario de Majid Ali
Majid Alí

Agregué la declaración extra, puedes ver esto "type": "module", declaración, escrita después license.

"author": "",
  "license": "ISC",
  "type": "module",
  "dependencies": {
    "chalk": "^5.0.1"
    
  }
}

¿Ha sido útil esta solución?