web-dev-qa-db-fra.com

Comment effectuer une exportation compatible avec ES5 et ES6?

J'écris une "classe" dans le nœud

// mymodule/index.js

function MyClass() {}
MyClass.prototype.method1 = function() {..}

généralement je fais

module.exports = MyClass

mais je veux que ma classe soit disponible pour les deux syntaxes

var MyClass = require('mymodule')

et

import {MyClass} from 'mymodule'

Quelle est la bonne façon de procéder?

27
rkmax

En ce qui concerne l'écriture d'une exportation compatible à la fois pour ES5 et ES6, Babel s'en occupe déjà pour vous. (Comme indiqué dans les commentaires de votre question. Je ne fais que clarifier pour ceux qui se sont perdus dans la boîte de dialogue.)

module.exports = MyClass

fonctionnera avec var MyClass = require('mymodule') et import MyClass from 'mymodule

Cependant, pour être clair, la syntaxe réelle que vous avez demandée:

import {MyClass} from 'mymodule'

signifie quelque chose de différent de

import MyClass from 'mymodule'

Pour ce dernier, vous devrez l'exporter sous la forme: module.exports.MyClass = MyClass, Et pour les modules ES5, il devra être requis comme var MyClass = require('mymodule').MyClass

12
Nnenna Ude

Les deux façons sont correctes, mais essayez d'importer en es6 comme ceci sans les crochets:

import MyClass from 'mymodule'

Sinon, vous devrez exporter votre fonction comme ceci:

module.exports.MyClass = MyClass

et que l'importer comme ceci:

import { MyClass } from 'mymodule'
4
Arwed Mett

D'après les commentaires, je comprends que vous essayez d'exécuter votre code frontal ES6 dans certains tests unitaires mocha dans le nœud. Oui, vous ne pouvez pas le faire tant que le nœud ne prend pas en charge les modules ES6. Si j'étais vous, j'utiliserais systemjs pour charger le code de ces tests mocha. Mocha prend en charge les promesses, il devrait donc être assez facile de charger tous les fichiers avant les tests.

L'écriture de syntaxe pour les deux ne fera que créer plus de problèmes pour vous.

0
Capaj