web-dev-qa-db-ja.com

ES5およびES6と互換性のあるエクスポートを実行するにはどうすればよいですか?

私はノードで「クラス」を書いています

// mymodule/index.js

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

通常私はします

module.exports = MyClass

しかし、両方の構文でクラスを使用できるようにします

var MyClass = require('mymodule')

そして

import {MyClass} from 'mymodule'

正しい方法はどれですか?

27
rkmax

ES5とES6の両方に互換性のあるエクスポートを作成する限り、Babelはすでにそれを処理します。 (あなたの質問へのコメントで伝えられているように。ダイアログで迷子になった人だけを明確にしている。)

_module.exports = MyClass
_

var MyClass = require('mymodule')と_import MyClass from 'mymodule_の両方で動作します

ただし、明確にするために、あなたが尋ねた実際の構文:

_import {MyClass} from 'mymodule'
_

とは異なるものを意味する

_import MyClass from 'mymodule'
_

後者の場合は、_module.exports.MyClass = MyClass_としてエクスポートする必要があり、ES5モジュールの場合はvar MyClass = require('mymodule').MyClassとして要求する必要があります

12
Nnenna Ude

どちらの方法も正しいですが、括弧なしで次のようにes6にインポートしてみてください。

import MyClass from 'mymodule'

それ以外の場合は、次のように関数をエクスポートする必要があります。

module.exports.MyClass = MyClass

そして、このようにインポートするより:

import { MyClass } from 'mymodule'
4
Arwed Mett

コメントから、nodeのいくつかのモカ単体テストでES6フロントエンドコードを実行しようとしていることがわかります。はい、ノードがES6モジュールをサポートするまで、それはできません。もし私があなたなら、 systemjs を使用してこれらのmochaテストのコードをロードします。 Mochaはプロミスをサポートしているので、テストの前にファイルをロードするのは非常に簡単です。

両方の構文を記述すると、より多くの問題が発生します。

0
Capaj