簡體   English   中英

在Meteor中使用ES6導入還為時過早嗎?

[英]Is it too early to use ES6 import and export in 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 Dev Tools時, 確實顯示了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');感到困惑let animal = new Animal('cat'); index.js運行時有效,但從瀏覽器運行時無效。

上述限制使調試非常困難。 暫時最好不要使用ES6模塊嗎? 並且在Meteor服務器端是否完全支持它們?

導入會創建詞法綁定,盡管您有自己的名字,但它們不是全局的。 (實際上,模塊中都不是var綁定。)如果要將它們安裝在全局對象上,可以將window.globalCode = globalCode或類似內容放在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));

});

為了回答您有關es6的問題,我會盡可能使用它,並建議使用相同的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM