2016-11-10 4 views
0

私は2つのコンストラクタSignUpとGoogleSignInを持っています。構造的に、彼らは次のようになります。babelでwebpackを使用すると、名前付きエクスポートでデフォルトエクスポートをインポートするとエラーが発生するのはなぜですか?

import SignUp, {gapi_promise} from "./SignUp"; 
/** 
* 
* @param element 
* @extends SignUp 
* @constructor 
*/ 
function GoogleSignIn(element){ 

    SignUp.call(this); 
} 

GoogleSignIn.prototype = Object.create(SignUp.prototype); 

export default GoogleSignIn; 

function SignUp(){ 
    //Some constructor code 
} 

export let gapi_promise = (function(){ 

    return new Promise((resolve, reject) => { 
     //Do some promise stuff with the google api 
    }); 
}()); 

export default SignUp; 

私は一緒にこれらおよびその他の資産をバンドルするバベルローダーでのWebPACKを使用してきたが、私は私のページをロードするとき、私はエラーを取得します:

GoogleSignIn.js?1051**:21 Uncaught TypeError: Cannot read property 'prototype' of undefined(…) 

基本的に、SignUpの値は未定義です。値を誤ってインポートまたはエクスポートしていますか?

具体的には、失敗した行は、このいずれかになります。

GoogleSignIn.prototype = Object.create(SignUp.prototype); 

必要であれば、私は追加の詳細を提供することができます。どうもありがとうございました!

+1

サイクリック依存関係はありますか? –

答えて

1

ES6仕様に従ってモジュールをコンパイルするBabel 6を使用している可能性があります。昔輸出の挙動を取得するには、このプラグイン(https://www.npmjs.com/package/babel-plugin-add-module-exports)2.Use

1.Change GoogleSignIn.prototype = Object.create(SignUp.prototype); GoogleSignIn.prototype = Object.create(SignUp.default.prototype);

:それはこのような場合は、次の2つのソリューションを提供しています。

Babel 6 changes how it exports default

+0

実際のWebpackの出力にObject.create(SignUp.default.prototype)が表示されるため、正しいかもしれないと思います。私は今夜​​仕事の後にこれを試して、あなたと一緒に戻ってくるつもりです。 – Robert

+1

あなたが言いたいことは、CommonJSを介してES6モジュールをインポートする場合にのみ問題になります。しかし、OPはES6のインポートを使用しています( 'import SignUp、{gapi_promise} from ./SignUp ';')、問題ではないはずです。 'SignUp'変数はそのクラスを参照すべきです。 –

+0

これは正しい@FelixKlingです。あなたの元のコメントに対処するために、私はサインインフォームにサインインするボタンを持っています。そのため、SignUpにサインインし、SignUpをLoginにインポートしました。それは循環依存であるように見えますが、私はそれを避ける方法が完全にはわからないと思います。あなたの助言は何ですか? – Robert

関連する問題