RequireJS没有加载名为" module.js"的文件或模块。

时间:2016-01-21 14:38:11

标签: requirejs

我刚开始使用RequireJS。我尝试了一个简单的代码,但有一种方法有效,但另一种方法没有。

文件夹"脚本"有" main.js"," module.js"," require.js"

<script data-main="script/main.js" src="script/require.js"></script>

在main.js中

requirejs( ['module'], function( mod ) {
    mod.sayHello();
} );

在module.js中:

define( {
    name : "value",
    sayHello : function() {
        alert( "Hello" );
    },
    sayBye : function() {
        alert( "Bye" );
    }
} );

我希望baseUrl成为&#34;脚本&#34;正如这里提到的那样:

http://requirejs.org/docs/api.html#jsfiles

  

baseUrl通常设置为与要为页面加载的顶级脚本的data-main属性中使用的脚本相同的目录。

所以,我认为没有问题,但不是mod.sayHello(),也不是sayBye()和console.log(mod.name)= undefined。

我尝试了console.log( mod )并打印出类似这样的内容:

Object {id: "_@r6", uri: "script/_@r6.js", exports: Object}

当我使用[&#34; script / module.js&#34;]而不是[&#34; module&#34;]时,console.log( mod )打印如下:

Object {name: "value"}
name: "value"
sayBye: ()
sayHello: ()
__proto__: Object

和mod.sayHello(),mod.sayBye(),mod.name都可以。

包括main.js开头的以下内容是相同的:

requirejs.config( {
    baseUrl: "script"
} );

我做错了什么......请帮忙。

2 个答案:

答案 0 :(得分:1)

为您的模块使用与module不同的名称。首先,它是一个非常无法提供信息的名称,但名为module的模块是RequireJS的特殊模块。它是一个模块,提供有关您当前所在模块的信息。例如,如果foo.js包含此代码:

define(['module'], function (module) {
    console.log(module.id);
});

当您请求名为foo的模块时,会加载此文件,然后console.log将在控制台上显示"foo"

文档没有强调module的存在,但在解释配置选项config的作用时,它会讨论它。因为您可以通过module.config()访问模块的配置。

要求"script/module.js"有效的原因是,当您执行此操作时,您需要一个名为script/module.js而非module的模块。

答案 1 :(得分:0)

我继续阅读文档:

http://requirejs.org/docs/api.html

它导致github有关于此的信息:

https://github.com/jrburke/requirejs/wiki/Differences-between-the-simplified-CommonJS-wrapper-and-standard-AMD-define#magic

事实证明&#34;模块&#34;是一种神奇的模块&#34;沿着&#34;要求&#34;,&#34;导出&#34;。

和&#34;模块&#34; ......:

  

为您提供有关模块ID和当前模块位置的信息

https://github.com/jrburke/requirejs/wiki/Differences-between-the-simplified-CommonJS-wrapper-and-standard-AMD-define#module