在require.js中使用define()

时间:2014-04-23 07:59:07

标签: javascript requirejs

我开始使用require.js

学习 main.js
require(['jquery', 'underscore', 'Module1'], function($, _, Module1) {
    Module1.init();
    $('#output').html('Hello World!');
});
module1.js
define('Module1', [], function(app) {
    var init = function() {
        alert('Hello World!')       ;
    }

    return {
        init: init
    };
});

它正在运行,但我想知道我可以在 module1.js 中更改为define('MyApp', [] function(app){});,并将我的 main.js 修改为

require(['jquery', 'underscore', 'MyApp'], function($, _, MyApp) {
    MyApp.init();
    $('#output').html('Hello World!');
});

请帮助,以便了解有关使用require.js的更多信息。

感谢。

被修改

在以下答案的帮助下,我已将我的编码修改为

module1.js
define('MyApp', [], function(app) {
    var init = function() {
        alert('Hello World!')       ;
    }

    return {
        init: init
    };
});
main.js
require.config({
    baseUrl: 'js',
    paths: {
        Module1: 'module1'
    }
});

require(['jquery', 'underscore', 'Module1'], function($, _, MyApp) {
    MyApp.init();
    $('#output').html('Hello World!');
});

不幸的是我仍然无法正常工作,所以请给我更多建议。

3 个答案:

答案 0 :(得分:1)

在定义部分中,您当前正在定义MyApp模块的依赖关系,而不是模块本身的名称。搜索requirejs.config部分并更改模块的名称。

requirejs.config({
    paths: {
        'Module1': '../somepath/module1.js', // change Module1 to MyApp
        ... 
    }
});

当您更改了模块的名称后,您可以使用以下命令初始化模块:

require(['MyApp'], function(MyApp) {
    MyApp.init();
});

修改

您还需要定义其他模块/插件。

main.js

require.config({
    baseUrl: 'js',
    paths: {
        'myApp': 'module1',
        'jquery': 'jquery.min',
        'underscore': 'underscore.min'
    }
});

require(['jquery', 'underscore', 'myApp'], function($, _, MyApp) {
    MyApp.init();
    $('#output').html('Hello World!');
});

module1.js

define(function() {
    var init = function() {
        alert('Hello World!');
    };

    return {
        init: init
    };
});

您也可以在模块中定义模块的名称,但是我 我不建议。来自require.js doc

  

您可能会遇到一些define()调用,其中包含模块的名称作为第一个   define()[...]的参数这些通常是由   优化工具。您可以自己明确命名模块,但它   使模块不那么便携 - 如果你将文件移动到另一个   您需要更改名称的目录。通常最好   避免编码模块的名称,只是让优化   工具在模块名称中刻录。优化工具需要添加   名称,以便允许多个模块捆绑在一个文件中   在浏览器中加快加载速度。

答案 1 :(得分:1)

在定义部分中,第一个参数是模块名称,第二个参数 - 依赖项(字符串数组),第三个参数 - 是在满足所有依赖项后运行的结构函数。 在require部分中,您将依赖项用作第一个参数,将结构函数用作第二个参数。 因此,在您的示例中,您将依赖项的名称更改为MyApp,并且要求部分不知道什么是依赖项Module1,因为您更改了此依赖项的名称。

答案 2 :(得分:1)

如果您要定义一个名称与其所在文件不同的模块,那么您应该使用bundle config。

require.config({
    bundles: {
        module1: ["MyApp"]
    }
});

您可以将在同一文件中定义的其他模块添加到阵列中。

如果文件中只有一个模块,那么您应该在没有名称的情况下定义它,并使用路径将模块名称指向文件,如enyce12&#39的答案节目。