17

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

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

索引.html

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

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

测试.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');
});
4

3 回答 3

12

山安是对的。在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);
})

它就像我想要的那样工作。

于 2015-08-06T20:43:27.940 回答
11

这是旧的,但我只是碰到它。当然你可以在同一个文件中有多个定义,是的,这是有道理的。

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

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

认为有时您不需要动态加载资源,实际上可能需要在开始时全部加载它们,在打包时共同创建单个连接/缩小的 js 文件是最好的解决方案。

因此,您不会利用“延迟加载”,但您仍然可以使用 RequireJS 以模块化方式设计您的应用程序。

于 2015-06-12T13:54:01.190 回答
0

那是对的吗 ?

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

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

使用文件名。

在某些情况下会多次初始化吗?

模块可以通过优化工具分组到优化的包中。

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

这里给出了 Hello World 模块的示例。

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

于 2013-08-19T09:24:10.257 回答