質問: new slimshady()` export default slimshady
回答: 問題はあります es6モジュールがcommonjsでどのようにエミュレートされるか モジュールのインポート方法 es6からcommonjsへこれを書いている時点では、es6モジュールをネイティブにサポートしている環境はありません。 node.jsでそれらを使用するときは、モジュールをcommonjsに変換するためにbabelのようなものを使用する必要があります。しかし、それはどのように正確に起こりますか?多くの人がmodule.exports = ...をexport default ...に、exports.foo ...をexport const foo = ...に相当すると同等と見なしています。しかしそれは必ずしも真実ではない、あるいは少なくともbabelがどのようにそれをしているのかはそうではない。es6のdefaultエクスポートは、実際には named exportsでもあります。ただし、defaultは「予約済み」の名前であり、特別な構文サポートがあります。 babelが名前付きおよびデフォルトのエクスポートをどのようにコンパイルするかを見てみましょう。// input export const foo = 42; export default 21; // output "use strict"; object.defineproperty(exports, "__esmodule", { value: true }); var foo = exports.foo = 42; exports.default = 21; ここで、デフォルトのエクスポートがexportsのようにfooオブジェクトのプロパティになることがわかります。モジュールをインポートするモジュールをインポートする方法は2つあります。commonjsを使用するか、es6のimport構文を使用する。 あなたの問題: /あなたはこんなことをしていると思います:var bar = require('./input'); new bar(); barにデフォルトのエクスポートの値が割り当てられることを期待しています。しかし、上の例でわかるように、デフォルトのエクスポートはdefaultプロパティに割り当てられています。そのため、デフォルトのエクスポートにアクセスするには、実際に行う必要があります。var bar = require('./input').default; es6モジュールの構文を使うと、import bar from './input'; console.log(bar); バベルはそれをに変換します'use strict'; var _input = require('./input'); var _input2 = _interoprequiredefault(_input); function _interoprequiredefault(obj) { return obj && obj.__esmodule ? obj : { default: obj }; } console.log(_input2.default); barへのすべてのアクセスが.defaultへのアクセスに変換されていることがわかります。