2016-03-30 5 views
15

1つのファイルで定義されたクラスを使用し、別のファイルをnode.jsで拡張する正しい方法は何ですか?ES6クラス、異なるファイルに親があり、node.js?

現在、私が持っている:私が持っている '子' クラスファイルで

'use strict' 

class BasePageHandler { 

    constructor(app, settings, context) { 

    } 
} 

return module.exports; 

:I場合、

TypeError: Class extends value #<Object> is not a function or null 

注:

'use strict' 

var BasePageHandler = require ('./../BasePageHandler.js'); 

class FrontpagePageHandler extends BasePageHandler { 
    constructor(app, settings, context) { 
     super(app, settings, context); 
     this.settings = settings; 
     this.context = context; 
    } 
} 

これは、次のエラーで失敗します同じファイルにBasePageHandlerを持っていればうまくいきますので、クラスが別のファイルにあるときに問題があります。

現在ノード4.4.0を使用しています。あなたは正しくBasePageHandler.jsファイルにクラスをエクスポートする必要が

+0

](https://www.npmjs.com/package/babel-plugin-transform-es2015-modules-commonjs)の代わりに 'module.exports'を使います。そうすれば、Nodeがネイティブにモジュールを実装しているときに、あなたのコードは未来の状態のままになります。 –

答えて

25

module.exports = BasePageHandler; 
+0

確かに。私は明らかに見逃しました:) –

+2

私はあなたが1行に置くこともできると確信しています: 'module.exports = class BasePageHandler {'その方法は、クラスの名前を変更すると、後でそれを変更する場所が1つ少なくなります。 – CodingWithSpike

+1

この後、私はまだ同じ問題を抱えていますか?私は 'harmony_destructuring'フラグを使用しています! – James111

7

受け入れ答えは、技術的に細かいですが、ES6を使用している場合は、本当に、あなたはすべてに行くとES6 export/importを使用する必要があります。

/*jshint esversion: 6 */ 

class BasePageHandler { 
    constructor(app, settings, context) { 
    } 
} 

export default BasePageHandler; 

、その後:あなたはバベル用のプラグインを変換[共通JSで[ES6ネイティブモジュール](http://exploringjs.com/es6/ch_modules.html)を使用することもできます

/*jshint esversion: 6 */ 

import BasePageHandler from './../BasePageHandler.js'; 

class FrontpagePageHandler extends BasePageHandler { 
    constructor(app, settings, context) { 
     super(app, settings, context); 
     this.settings = settings; 
     this.context = context; 
    } 
} 
+4

ところで、ES6では「厳密に使う」必要はありません。デフォルトで強制されています。 –

関連する問題