source

대신 index.js의 요구 사항을 모든 공용에서 사용할 수 있는 동적 가져오기()로 변경합니다.JS 모듈

manysource 2023. 9. 17. 13:18

대신 index.js의 요구 사항을 모든 공용에서 사용할 수 있는 동적 가져오기()로 변경합니다.JS 모듈

node/javascript/nfts로 작업하려고 하면 초보자이고 자습서를 따라갔지만 다음 오류가 발생합니다.

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

노드 파일을 업데이트했기 때문에 튜토리얼과 다른 코드가 필요한 것으로 알고 있지만 어느 것으로 변경해야 하는지, 어디로 무엇으로 변경해야 하는지 모르겠습니다.가능한 한 구체적으로 말씀해 주시기 바랍니다.

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));
})

그것은 그 때문입니다.node-fetch꾸러미의이 패키지의 최신 버전은 ESM만 지원하므로 이전 버전으로 다운그레이드해야 합니다.node-fetch@2.6.1그 이하.

npm i node-fetch@2.6.1

이렇게 하면 문제가 해결됩니다.

이전 버전을 사용할 필요가 없습니다."require" 대신 이 줄을 사용할 수 있습니다.

const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args));

포장지로 가세요.json 파일 및 쓰기:

"type": "module",

디버그 이상의

글을 쓰는 대신에require('chalk').js 파일에서 다음으로 변경합니다.import chalk from 'chalk'

이 문제는 모듈 가져오기에 문제가 있는 패키지의 최신 버전을 설치할 때 발생할 수 있습니다.

저의 경우 최신 버전의 를 설치한 후 오류가 발생했습니다.crypto-random-string꾸러미의어떤 패키지가 이 오류를 유발하고 있는지 확인하려면 위에 보고된 오류 이전 메시지를 확인합니다.제 경우에는 이렇게 적혀있습니다.error: uncaughtException: require() of ES Module /Users/myname/Documents/mydir/anotherdir/my-project/node_modules/crypto-random-string/index.js

이 문제를 해결하기 위해 다음과 같은 작업을 통해 이전 버전으로 다운그레이드했습니다.

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

angular 13으로 업그레이드 후 angular-devkit의 common.js에서 이 오류가 발생했습니다.업그레이드 중에 누락된 내용을 발견했습니다.

ng 업데이트가 @ng-devkit 패키지를 확인하거나 업데이트하지 않음

다음을 사용하여 제거했습니다.

ng update @angular-devkit/build-angular 

저에게 효과가 있었던 또 다른 옵션은 재배포하는 패키지 노드 가져오기 네이티브를 사용하는 것입니다.node-fetch폴리필로 말입니다

하나의 문장을 추가했습니다. 당신은 이것을 볼 수 있습니다."type": "module",문장, 다음에 적음license.

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

언급URL : https://stackoverflow.com/questions/70541068/instead-change-the-require-of-index-js-to-a-dynamic-import-which-is-available