在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开发工具时,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
中。
我认为这个问题是一个变量作用域问题。如果你要在"客户端/索引"页面的顶部导入,我想你会得到想要的结果:
import { Animal, globalCode } from '/lib/globalcode.js';
Template.index.onRendered( () => {
let animal = new Animal('cat');
animal.speak();
console.log(globalCode.add(5,6));
});
为了回答你关于es6的问题,我会尽我所能使用它,并推荐使用它。
相关文章:
- 访问布局信息是否也会导致浏览器重排
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 如何检测是否有溢出
- jQuery中是否内置了任何字符串格式化函数
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 测试索引值是否等于某个数字的倍数
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- YUI3 IO实用程序是否可以根据给定的内容类型标头值自动序列化数据
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 是否可以禁用jquery中的单个单选按钮
- 是否可以从父类访问子类的属性
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 如何让程序检查所选单词中是否有按键
- 用于检查数组中是否存在元素的javascript自定义方法
- 如何使用jquery确定用户是否年满18岁
- 在Meteor中使用ES6导入和导出是否为时过早