如何以简单的方式将函数转换为RequireJS中的模块?

时间:2013-10-09 23:06:26

标签: javascript node.js requirejs require requirejs-define

我一直在阅读文档,但我似乎无法轻松地做到这一点。我认为我对使用相同词语的node.js过分混淆,例如requireexportsmodule等。

想象一下像这样的主要脚本。 (并想象功能很复杂)

require(['jquery', 'domReady!'], function($) {

    $("#staticButton").click(function() {
        showMessage('What does this button do?');
    });

    function showMessage(message) {
        alert(message);
    }

});

现在想象一下我想在多个脚本中使用showMessage()。我该怎么做呢?

Node.js我会showMessage() exports.showMessage附加showMessage.js require(['jquery', 'domReady!'], function($) { var showMessage = require('showMessage'); // Easy huh? $("#staticButton").click(function() { showMessage('What does this button do?'); }); }); 并在我想要使用的地方做类似的事情:

RequireJS

但是对于require,这给了我首先需要加载它的错误。在使用上述语法之前,我需要definerequire吗? 我真的需要在主脚本require(['jquery', 'domReady!', func01, func02, (...) func20], function($, empty, func01, func02, (...) func20) {} 数组中添加它吗?我不喜欢那样。如果你有20个功能怎么办?

Node.js

那是纯粹的句法盐。我更喜欢var func01 = require(func01), func02 = require(func02), (...) func20 = require(func20); 糖方式:

define(function(require, exports, module) {
    return function(message) {
        alert(message);
    }
});

我太混淆了两者。有人可以解释我如何简单地将函数放在外部文件中并尽可能简单地使用它们吗?


我假设模块转换功能需要如下所示:

{{1}}

..但如果可以做得更容易,我很乐意听到它。

1 个答案:

答案 0 :(得分:4)

你应该尝试用模块来思考,在这种情况下,函数是更低级别的东西。你定义 modules ,要求他们稍后将他们的公共“接口”作为具有某些属性的对象返回,这可能恰好是函数。

我觉得有用的是“静态工具模块”模式:

<强> utils.js

define(function () {
    return {
        showMessage: function (text) {
            alert(text);
        },
        foo: function () {
            alert('bar');
        }
    }
})

或简化的等价物:( - &gt; docs

<强> utils.js

define({
    showMessage: function (text) {
        alert(text);
    },
    foo: function () {
        alert('bar');
    }
});

然后,在 main.js

define(['utils'], function (Utils) {
    Utils.showMessage('!');
})

如果最终依赖太多(通常表明你的模块做得太多,顺便说一下),你可以使用sugar syntax代替:

define(function (require) {
    var Utils = require('utils');
    Utils.showMessage('!');
})