Require.JS 是适合这项工作的工具吗?

Is Require.JS the right tool for the job?

好吧,我对 JavaScript 比较陌生,可能真的需要 4-5 个月左右的涉猎时间。但是我想改进我的 JavaScript 以匹配我的一般编码方式。

我通常是一名 PHP 开发人员,并使用 Composer 加载我的 类 以供使用。 Require.JS 允许我这样做吗?例如,我称之为 module 的一个简短片段是:

var tabs = function(paramOps) {
    var _this = this;
    _this.opts = {
        header: {
            target: 'tabbedHeader'
        },
        content: [{
            id: '',
            title: 'Default Title',
            descr: 'Data is yummy'
        }]
    }
    $.extend(true, _this.opts, paramOpts);
    _this.render = function() {
        // YOU GET THE IDEA
    }
    return _this;
}

然后我会使用 :

加载我的模块
var tabs = new tabs();
tabs.render(paramOpts); // paramOpts is defined elsewhere

好吧,在没有应用程序 JS 文件的野兽的情况下,我可以使用 Require.JS 将它们作为模块加载吗?

Ok so without having a beast of an application JS file, am I able to load these in as Modules using Require.JS?

是的。假设您在 tabs.js 中定义了它。然后你会做:

var Tabs = require("./tabs.js");

(我不是需求专家,所以我不知道为什么需要前导 ./,但是 it's shown in this example linked from the Require website,所以...)

但它还可以 很多。例如,您可以在 tabs.js 中使用 define 为其指定一个可解析的名称,而不是文件名,例如:

tabs.js:

define("tabs", function() {
    // ...create your Tabs function

    return Tabs;
});

然后使用它:

var Tabs = require("tabs");

或者,如果您在应用其他地方的另一个组件中使用它,也许 ui.js,并且您想在 ui.js 中使用 define,那么:

ui.js:

define("ui", ["tabs"], function(Tabs) {
    // Use Tabs here

    // Return whatever it is the 'ui' module defines
});

这建立了一个依赖关系:RequireJS 知道加载 ui 必须涉及加载 tabs,它也是如此,然后提供 ui 及其依赖关系作为 define回调。


旁注:最好遵守约定,如果您要将函数作为构造函数调用(例如,通过 new),它应该是初始上限:Tabs,不是 tabs.