2016-07-28 10 views
0

私はES6でいくつかのコーディングを行い、インポート/エクスポートの仕組みがどのように機能しているか把握しようとしています。メテオでES6のインポートとエクスポートを使用するのは時期尚早ですか?

/lib/globalcode.js

'use strict'; 

let globalCode = { 

    add: (x,y) => { 
     return add(x,y); 
    } 

}; 

let add = (x,y) => { 
    return x + y; 
}; 

class Animal { 

    constructor(name) { 
    this.name = name; 
    } 

    speak() { 
    console.log(this.name + ' makes a noise.'); 
    } 

}; 

export { Animal, globalCode }; 

/client/index.js

import { Animal, globalCode } from '/lib/globalcode.js'; 

Template.index.onRendered(() => { 

    let animal = new Animal('cat'); 
    animal.speak(); 

    console.log(globalCode.add(5,6)); 

}); 

私はanimal.speak()console.log(globalCode.add(5,6))からの出力がは、表示を行うクローム開発ツールに入るが、私は手動でコンソールにlet animal = new Animal('cat')globalCode.add(5,6)を入力すると私はそれぞれAnimal not definedglobalCodeが定義されていません。

はどうやら何のブラウザは正式にES6モジュールをサポートはまだありませんが、私は console.log(globalCode.add(5,6))let animal = new Animal('cat');仕事 index.jsから実行したときに、なぜが、ブラウザから実行しないときに混乱しています。

上記の制限により、デバッグが非常に困難になります。 ES6モジュールからしばらく離れるのが最善でしょうか? Meteorサーバー側で完全にサポートされていますか?

答えて

2

インポートは、あなたの名前にもかかわらず、ではなく、グローバルであるレキシカルバインディングを作成します。 (実際にはモジュール内にvarバインディングはありません)。グローバルオブジェクトにそれらをインストールする場合は、window.globalCode = globalCodeなどをindex.jsに入れることができます。

0

問題は可変スコープの問題だと思います。

import { Animal, globalCode } from '/lib/globalcode.js'; 

Template.index.onRendered(() => { 

    let animal = new Animal('cat'); 
    animal.speak(); 

    console.log(globalCode.add(5,6)); 

}); 

そしてES6についてのあなたの質問に答えるために、私は私がして推薦することができ、どこでもそれを使用する:あなたはあなたの「クライアント/インデックス」のページの一番上にインポートした場合、私はあなたが希望する結果を得るだろうと思います同じ。

+0

バー、同じことが起こります。私はOPを編集してファイルの先頭に 'import 'を持ってきました。 – fuzzybabybunny

関連する問題