【问题标题】:Js file load order in meteor流星中的js文件加载顺序
【发布时间】:2015-02-16 01:59:43
【问题描述】:

在meteor docs中写到project_root/lib文件夹中的所有文件都会先加载;

我有这个代码:

//defined in /lib/utilties.js
String.prototype.capitalize = function(){
    return this.replace(/(^|\s)([a-z])/g, function(m, p1, p2) { 
        return p1 + p2.toUpperCase();
    });
};

还有这个:

//defined in /client/event-helpers/form.js
Template.form.helpers({
    fieldType: function(field) {
        return 'form-' + capitalize(field)
    }
});

说大写未定义是行不通的;在 /client/event-helpers/form.js 中移动大写函数让它工作; 那么有人可以帮助我了解流星中的文件加载优先级以及为什么会发生这种情况?

【问题讨论】:

    标签: meteor


    【解决方案1】:

    您已经正确解释了有关加载顺序的文档,但这不是您的代码的问题。您将capitalize 添加到String 原型中,但您将其用作全局函数。试试这个:

    return 'form-' + field.capitalize();
    

    【讨论】:

    • 确定加载顺序已被正确解释(“project_root/lib 文件夹中的所有文件都先加载”)?我也将其解释为,但我刚刚创建的一个小型测试应用程序在lib/test.js 之前加载了client/lib/test.js。一个错误?
    • 他是正确的,首先加载 lib 文件夹,但是嵌套文件夹也具有更高的优先级。所以我很确定嵌套的 AND lib 文件夹会在其他任何东西之前被加载,这解释了你的例子。
    【解决方案2】:

    我认为您误解了这些文件。 lib 目录中的文件不会先加载。首先加载最低子目录中的文件。

    【讨论】:

    • well "按照上述排序后,名为 lib 的目录下的所有文件都将在其他所有文件之前移动,保持它们的顺序。" - 这是写在官方文档中的;客户端和服务器的公共代码应该先加载;
    • 但是,如果您查看示例,他们使用 client/lib 目录来存放应首先显式加载到客户端的内容。
    • 那么,客户端和服务端都可以使用的常用函数应该放在哪里,需要第一时间加载呢?
    • 在 /client/lib/main/utilities.js 中移动大写函数时,我仍然遇到同样的错误
    猜你喜欢
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 2015-10-04
    相关资源
    最近更新 更多