我喜欢保持我的javascript文件尽可能小并使用architectural pattern。这通常意味着在服务,控制器,模型,视图等中分割我的js文件。
Meteor自动加载所有js文件。但是,任何js文件中定义的每个变量都将作为该文件的局部变量处理。为了能够访问它们,我必须像这样定义它们:
unsigned int
定义不带关键字//global
my_global_function = function(){
}
//not global
var my_global_function = function(){
}
//not global
function my_global_function(){
}
或var
的变量/函数不是好习惯。有哪些可能的选择?
答案 0 :(得分:3)
最佳选择是使用ES2015模块。
Meteor本身不支持模块,但有些软件包可以提供这种支持。
例如,universe:modules。
使用模块,您可以导入和导出一些变量/函数/类/等:
// module1.import.js
import alertSomething from './module2'
Meteor.startup(() => {
alertSomething();
});
// module2.import.js
export default function alertSomething() {
alert('something');
}
universe:modules
不是唯一的解决方案,还有其他类似的项目。我特别喜欢这个https://github.com/thereactivestack/kickstart-simple。它用WebPack取代Meteor的构建系统,并在使用React时启用热重新加载。
<强>更新强>
Meteor现在支持ES6模块
答案 1 :(得分:2)
由于您似乎对正确的建筑设计非常感兴趣,我建议您查看Meteor软件包。基本上,您必须在package.js
配置中声明任何全局公开的变量,这是您想要的:尽可能少的&#34;泄漏&#34;尽可能。在一个软件包中,你可以稍微草率一点,但你仍然可以使用var
(并且没有var
)来在包中进行更细粒度的控制。这可以在Meteor中完成。
您可以在package documentation中找到大部分信息。最简单的入门方法是使用meteor create --package [package-name]
创建一个包。这设置了一个基本结构。 api.export
函数控制公开的变量。请参阅文档here。
此外,请注意在内在的Meteor建筑设计之上添加不必要的图层。模板是视图,服务器端方法是服务等。只有一些东西你不能开箱即用,所以通常你&#39;添加类似Astronomy或SimpleSchema的内容。
添加太多自己的架构可能最终会与你对抗Meteor框架本身......