在单个文件中RequireJS多个模块

时间:2013-08-19 07:00:57

标签: javascript requirejs

我想将多个模块合并到一个文件中,但我找不到关于如何操作的官方文档。现在我使用下面的方法,它有效,但我想知道以下内容:

  • 技术上是否正确?
  • RequireJS如何检查模块是否已加载?使用模块名称还是文件名?
  • 在某些情况下,此解决方案会多次启动模块吗?

的index.html

<script src="require.js"></script>
<script>
requirejs.config({
    paths: {
        'a': 'test',
        'b': 'test'
    }
});

require(['a', 'b'], function () {
    console.log('a & b loaded');
});
</script>

test.js

console.log('loading test.js');
// I have some init here, like "Avoid `console` errors in IE"

define('a', function () {
    console.log('a module');
});

define('b', function () {
    console.log('b module');
});

3 个答案:

答案 0 :(得分:10)

这已经过时了,但我刚碰到它。 当然,你可以在同一个文件中有多个定义,是的,这是有道理的。

您唯一需要做的就是使用命名定义。

define('module1', ['dependency1', 'dependency2'], function (d1, d2) {
    // your code here
}

认为有时候您不需要动态加载资源,实际上可能需要在开头加载所有资源,在打包时创建单个连接/缩小的js文件是最佳解决方案。 / p>

所以你不能利用&#34;延迟加载&#34;但您仍然可以使用RequireJS以模块化方式设计您的应用程序。

答案 1 :(得分:9)

尚安是对的。在http://requirejs.org/docs/api.html#define中,有一部分说:

磁盘上每个文件只应该有一个模块定义。

但是如果你想要做到这一点我发现了类似的东西:它来自官方文档: http://requirejs.org/docs/api.html#config-bundles

它表示您可以通过bundles属性定义在哪个文件中找到哪些模块。例如:我有文件叫 带有此类内容的 modules.js

define('module_one', function(){
    return 'Hello. I am module one';
})

define('module_two', function(){
    return 'Hello. I am module two';
})

然后在我的 main.js 文件中,我执行以下操作:

requirejs.config({
    baseUrl : 'modules/',
    bundles: {
        'modules': ['module_one', 'module_two']
    }
})

require(['module_one', 'module_two'], function(moduleOne, moduleTwo){
    alert(moduleOne);
    alert(moduleTwo);
})

它的工作方式与我想的一样。

答案 2 :(得分:0)

是正确的吗?

NO。磁盘上每个文件应该只有一个模块定义。

RequireJS如何检查加载的模块?使用模块名称或文件名?

使用文件名。

在某些情况下,

会多次启动?

优化工具可以将模块分组为优化的捆绑包。

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

此处给出了Hello World模块的示例。

http://mydons.com/requirejs-hello-world/