Meteor的顺序包括我的js文件

时间:2013-04-23 10:02:38

标签: javascript meteor

我有一个js文件:

function library_f() {
}

function some_f() {
  library_f();
}

function another_f() {
  library_f();
}

但代码看起来很难看,我决定将我的js文件拆分为三个:

one.js:

function library_f() {
}

two.js:

function some_f() {
  library_f();
}

three.js所:

function another_f() {
  library_f();
}

但现在我收到错误

library_f() is not defined

如何设置包含我的js文件的顺序?

2 个答案:

答案 0 :(得分:20)

来自docs

  
      
  • 首先加载应用程序根目录下的lib目录中的文件。   匹配main。*的文件将在其他所有文件后加载。

  •   
  • 子目录中的文件在父目录中的文件之前加载,因此最先加载最深子目录中的文件(在lib之后),并且最后加载根目录中的文件(除了main。*)。 / p>

  •   
  • 在目录中,文件按文件名的字母顺序加载。

  •   
     

这些规则堆栈,因此在lib中,文件仍然按字母顺序加载;如果有多个名为main.js的文件,则子目录中的文件会先加载。

但看起来无法访问这些功能,因为它们不是全局的。在meteor中,除非变量或函数是全局的,否则每个文件的变量/函数都不能被另一个文件访问。

所以你需要以这种方式声明你的功能:

library_f = library_f() {
...
}

因此可以被其他文件访问。变量也是如此:

var x = true; //Not accessible by other files
x = true; //Accessible by other files

var dothis = function () {...} //Not accessible by other files
dothis = function() {..} //Not accessible by other files
function dothis() {..} //Not accessible ny other files

答案 1 :(得分:2)

Meteor挖掘所有JS文件并将它们放入一个文件中,而且顺序不是你可以控制的。

我认为这里的问题是:你从哪里调用函数?如果他们马上自行执行,那么订单可能很重要。但是,Meteor通常会将函数加载到DOM中,然后运行它们以响应某些事件,例如Meteor.startup(callback)Template.page.rendered(callback)。在这些示例中执行时,您的所有JS文件都已加载,您的所有函数都应该准备就绪,无论您喜欢什么顺序。

如果您不是在创建它们之后立即尝试运行它们,那么值得在浏览器控制台中检查,您可以看到在页面加载后这些功能都存在于DOM中。输入library_f并查看返回的内容。