2016-05-03 19 views
1

私は非常に奇妙なバグを抱えています。私はこのモジュールを入手できない理由をデバッグしようとしていますes6-errorバベル6で動作します。テストは失敗し続けます。これらのテストの1つはかなり単純ですが、カスタムエラーのインスタンスはエラーでなければなりません。どちらもtrueである必要があります。拡張エラーes6クラスモジュールの問題

console.log(err instanceof Error) 
console.log(err instanceof ExtendableError) 

ここでは、ログの両方がtrueを返す場所作業jsbin上の正確な同じsrcコードの例があります。

同じ現象は、1つのノードファイルにそのコードを入れて、それを実行した場合に発生します。

テストが失敗した理由は、モジュールのインポートが正常に動作していないためです。これは異常に失敗します。

import ExtendableError from './index' 

var b = new ExtendableError(); 

console.log(b instanceof ExtendableError) // false 
console.log(b instanceof Error) // true 

なぜそれがconsole.logは私がtruetrue有効な動作を取得し、私はそれ自身のファイルにExtendableErrorを持っている場合、それはfalsetrueなるとExtendableErrorの宣言は、同じファイル内にあるときにということでしょうか?

ここにはoutput of the working babel 5 codeです。

+0

それは私のために働くhttp://esnextb.in/?gist=8c056fab3c332cc84ede7a00613dc8f2 –

+0

@MauricioPoppeこれはあなたがes5を使って現在のモジュールを使っているからです。 – ThomasReggi

答えて

0

この問題を回避するには、extendsのためにバベルのポリフィルの使用を停止し、あなた自身の

バベルたるみチャネルを介し率いる
class ExtendableError { 
    constructor(message = '') { 
    Error.call(this, message) 

    // extending Error is weird and does not propagate `message` 
    Object.defineProperty(this, 'message', { 
     enumerable : false, 
     value : message, 
     writable : true, 
    }); 

    Object.defineProperty(this, 'name', { 
     enumerable : false, 
     value : this.constructor.name, 
     writable : true, 
    }); 

    if (Error.hasOwnProperty('captureStackTrace')) { 
     Error.captureStackTrace(self, this.constructor); 
     return 
    } 

    Object.defineProperty(this, 'stack', { 
     enumerable : false, 
     value : (new Error(message)).stack, 
     writable : true, 
    }); 
    } 
} 

ExtendableError.prototype = Object.create(Error.prototype) 

var b = new ExtendableError() 

console.log(b instanceof Error) // true 
console.log(b instanceof ExtendableError) // true 
+0

上記の私の答えをチェックアウト!本当にありがとう! – ThomasReggi

+0

@ThomasReggi恐ろしいですが、私は 'Error.all(this、message)'を呼び出すのと同等の 'Object.getPrototypeOf(ExtendableError).call(this、message)'を呼び出す際にエラーが発生したと書いていました。エラーインスタンスでは、変換は効果的に 'ExtendableError'と' Error'の間に新しいレイヤーを作成し、 'Layer.call(this、message)'を実行するとエラーの代わりに未定義を返します:) –

関連する問題