3 votes

Comment importer un fichier Javascript qui est ESM à partir d'un module CommonJS? Erreur obtenue: Non pris en charge.

Mon projet est entièrement écrit en module CommonJS et je ne peux pas le changer. J'essaie d'utiliser une bibliothèque qui est un module ESM. La bibliothèque est la bibliothèque Got (https://github.com/sindresorhus/got).

Voici mon code

const request = require('request');
const Promise = require('bluebird');
// require('./wrapped-got');
var wrappedgot = null;

function HTTPRequestV2(hostURL, defaultOptions) {
    this.hostUrl = hostURL;
    this.requestWrapper = request.defaults(defaultOptions);
}

HTTPRequestV2.prototype.init = async function(){
    wrappedgot = await import('got');
    /*return import('got')
        .then(({default: theDefault}) => {
            wrappedgot= theDefault;
            console.log(theDefault);

        });
    console.log(wrappedgot);*/
};

Mais lorsque je lance cela, j'obtiens une erreur Non supporté sur la ligne wrappedgot = await import('got');

J'ai essayé d'utiliser le contournement de la fonction d'importation dynamique comme suggéré dans leur page des problèmes mais elle échoue avec l'erreur ci-dessus https://github.com/sindresorhus/got/issues/1789

J'ai même essayé d'exécuter leur code d'exemple mais cela échoue également avec la même erreur https://gist.github.com/szmarczak/0f2b70b2a1ed52a56a6d391ac02d094d

------Mise à jour-------

J'utilise la version Node 12.14.1, elle prend en charge async/await. J'ai lu sur SO où il a été utilisé dans la version Node 10

Utilisation de la fonction d'importation dynamique() sur Node.js

La version de la bibliothèque Got est 13.0.0

0voto

Quentin Points 325526

Node.js 12.x ne prend pas en charge les imports dynamiques qui ont été introduits avec Node 13.2.0. De plus, cela fait plus d'un an que le support de sécurité pour Node.js 12.x a pris fin.

Mettez à jour vers une version actuelle de Node.Js.

-1voto

WhoLostEvee Points 3

Je suis presque sûr que les imports doivent être dans la portée globale et que vous essayez d'utiliser un import à l'intérieur d'une fonction. Vous devrez déplacer cet import en dehors de cette fonction pour que l'erreur disparaisse. Comme solution à cela, import 'got' en haut avec ces requires et assignez-le à une variable, puis lorsque la fonction HTTPRequestV2.prototype.init est exécutée, vous devriez définir 'wrappedgot' pour quelle que soit la variable contenant l'import 'got'. J'espère que cela vous aidera.

<------------------ Améliorations générales de ce code ------------------>

Aussi, ceci est sans rapport, mais vous avez nommé une variable en haut 'Promise' et cela devrait vraiment être évité car une promise est une fonction constructeur en JavaScript et est utilisée pour autre chose, en utilisant son nom pour autre chose, cela pourrait entraîner des erreurs réelles avec des promises.

Je recommanderais également de ne pas utiliser 'var' à notre époque car c'est une version obsolète de JavaScript et peut entraîner des bugs inattendus que vous pourriez ne pas vous attendre à moins de savoir ce que vous faites.

Je recommanderais également d'utiliser import au lieu de require pour rester à jour avec les dernières implémentations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X