我怎样才能以简单的方式将函数转换为RequireJS中的模块?

我一直在阅读文档,但我似乎无法以一种简单的方式做到这一点。 我觉得我对node.js使用相同的单词,例如requireexportsmodule等,太多了。

想象一个主要的脚本是这样的。 (想象这些function是复杂的)

 require(['jquery', 'domReady!'], function($) { $("#staticButton").click(function() { showMessage('What does this button do?'); }); function showMessage(message) { alert(message); } }); 

现在想象我想在多个脚本中使用showMessage() 。 我怎样才能做到这一点?

Node.js我会将showMessage()附加到showMessage.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个function呢?

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

这是纯粹的语法盐。 我更喜欢Node.js糖的方式:

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

我太困惑了。 有人可以解释我如何简单地把外部文件的function,并尽可能简单地使用它们?


我假设模块的function需要看起来像这样:

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

但是,如果这可以做得更容易,我很乐意听到这件事。

你应该尝试从模块的angular度思考,在这种情况下,函数是更低级的东西。 你定义模块 ,要求他们稍后返回他们的公共“接口”作为一个对象的一些属性,这可能是function。

我发现有用的是“静态使用模块”模式:

utils.js

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

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

utils.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('!'); })