因此,我一直在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 defined
和globalCode
。显然,还没有浏览器正式支持ES6模块,但是我对为什么
console.log(globalCode.add(5,6))
和let animal = new Animal('cat');
在从index.js
运行时却不能从浏览器运行时为何起作用感到困惑。上述限制使调试非常困难。暂时最好不要使用ES6模块吗?并且在Meteor服务器端是否完全支持它们?
最佳答案
导入会创建词法绑定,尽管您有自己的名字,但它们不是全局的。 (实际上,模块中都不是var
绑定。)如果要将它们安装在全局对象上,可以将window.globalCode = globalCode
或类似内容放在index.js
中。