web-dev-qa-db-fra.com

noeud --experimental-modules, le module demandé ne fournit pas une exportation nommée

J'ai installé le noeud 8.9.1 (le même problème se produit dans la version 10.5.0).

J'essaie d'utiliser des importations nommées depuis des packages npm dans un fichier avec le .mjs

import { throttle } from lodash;

Je cours:

node --experimental-modules index.mjs

et je reçois:

SyntaxError: le module demandé 'lodash' ne fournit pas une exportation nommée 'throttle' à ModuleJob._instantiate (internal/modules/esm/module_job.js: 80: 21)

--experimental-modules sont supposés/ cesser d'être expérimentaux dans v10 LTS , alors pourquoi plus d'auteurs de modules n'ont-ils pas sauté dans le train?

8
stackdave

--experimental-modules ne prend pas encore en charge les exportations nommées:

--experimental-modules ne prend pas en charge l'importation d'exportations nommées depuis un module commonjs (à l'exception des propres fonctions intégrées au noeud).

C'est pourquoi vous ne pouvez pas utiliser la syntaxe:

 import { throttle } from lodash;

Au lieu de cela (pour le moment au moins) vous devez faire:

 import lodash from lodash;
 const { throttle } = lodash;

Vraisemblablement, un jour, Node ajoutera un support pour toutes les fonctionnalités du module ES.

1
machineghost

Vous devez utiliser l'extension .mjs.

Une fois que cela est défini, les fichiers se terminant par .mjs pourront être chargés en tant que modules ES.

référence: https://nodejs.org/api/esm.html

Mettre à jour:

On dirait que vous n'avez pas encore exporté la méthode.

Supposons que j'ai hello.mjs avec le contenu

export function sayHello() {
    console.log('hello')
}

je peux l'utiliser dans index.mjs comme ceci

import {sayHello} from './hello.mjs'
sayHello()
0
Tuan Anh Tran