1

我一直在阅读文档,但我似乎无法以简单的方式做到这一点。node.js我想我把这与使用相同的词(例如requireexports等)混淆了太多module

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

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

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

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

});

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

Node.js我会附在showMessage()里面exports.showMessageshowMessage.js在我想使用它的任何地方做这样的事情:

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

    var showMessage = require('showMessage'); // Easy huh?

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

});

但这RequireJS给了我首先需要加载它的错误。在我可以使用上述语法之前,require我需要这样做吗?define我真的需要将它添加到主脚本require数组中吗?我不喜欢那样。如果你有 20 个函数呢?

require(['jquery', 'domReady!', func01, func02, (...) func20], function($, empty, func01, func02, (...) func20) {}

那是纯语法盐。我Node.js更喜欢糖:

var func01 = require(func01),
    func02 = require(func02),
    (...)
    func20 = require(func20);

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


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

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

..但如果这可以更容易地完成,我很想听听。

4

1 回答 1

4

您应该尝试从模块的角度来思考,在这种情况下,函数是更底层的东西。您定义模块,要求它们稍后将其公共“接口”作为具有某些属性的对象返回,这些属性可能恰好是函数。

我发现有用的是“静态实用程序模块”模式:

实用程序.js

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

或简化的等价物: (-> docs )

实用程序.js

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

然后,在您的main.js 中

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

如果你最终有太多的依赖项(这通常表明你的模块做的太多了,顺便说一句)你可以使用糖语法来代替:

define(function (require) {
    var Utils = require('utils');
    Utils.showMessage('!');
})
于 2013-10-09T23:51:00.500 回答