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

How can I convert a function to a module in RequireJS in a simplistic way?

本文关键字:转换 RequireJS 模块 函数 简单 方式      更新时间:2023-09-26

我一直在阅读文档,但我似乎无法以简单的方式做到这一点。我想我太混淆了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()附加到showMessage.js内部的exports.showMessage,并在我想使用它的任何地方做这样的事情:

require(['jquery', 'domReady!'], function($) {
    var showMessage = require('showMessage'); // Easy huh?
    $("#staticButton").click(function() {
        showMessage('What does this button do?');
    });
});

但是有了RequireJS,这给了我首先需要加载它的错误。我是否需要requiredefine才能使用上述语法?我真的需要将其添加到主脚本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);
    }
});

..但如果可以更容易地做到这一点,我很想听听。

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

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

实用工具.js

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

或简化的等效项:(-> 文档(

实用工具.js

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

然后,在您的主.js中:

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

如果你最终有太多的依赖项(顺便说一下,这通常表明你的模块做得太多(,你可以改用糖语法:

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