2016-07-28 40 views
0

所以我一直在ES6中做一些編碼,並試圖弄清楚導入/導出的東西是如何工作的。在Meteor中使用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)); 

}); 

當我進入Chrome瀏覽器開發工具從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

進口創建詞彙綁定,儘管你的名字是而不是 global。 (實際上,模塊中的var綁定也不是。)如果要將它們安裝在全局對象上,則可以在index.js中放置window.globalCode = globalCode或類似內容。

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

Bah,同樣的事情仍然發生。我編輯了OP來將我的'import'帶到文件的頂部。 – fuzzybabybunny