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?
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
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'
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.