在单个文件中RequireJS多个模块

Ste*_*ing 16 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>
Run Code Online (Sandbox Code Playgroud)

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');
});
Run Code Online (Sandbox Code Playgroud)

Ale*_*ode 10

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

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

define('module1', ['dependency1', 'dependency2'], function (d1, d2) {
    // your code here
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 但是如何加载这个文件? (3认同)

Pru*_*rum 10

上安是对的.在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';
})
Run Code Online (Sandbox Code Playgroud)

然后在我的main.js文件中,我做了类似这样的事情:

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

require(['module_one', 'module_two'], function(moduleOne, moduleTwo){
    alert(moduleOne);
    alert(moduleTwo);
})
Run Code Online (Sandbox Code Playgroud)

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


Sha*_*man 0

那是对的吗 ?

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

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

使用文件名。

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

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

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

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

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

  • 建议每个文件只包含一个模块定义,但这并不意味着拥有 2 个或更多模块总是错误的。这个答案的“否”对我来说似乎太规范了。我认为 AlexCode 很赚钱。像大多数东西一样,关键是要理解为什么建议每个模块 1 个 - 我相信这是为了允许有效地使用优化器 r.js。我们有理由不使用 r.js,因为我们有自己的优化策略。每个文件加载多个模块(在我们的例子中,在服务器端构建一个模块,然后通过一个 Ajax 请求交付)是我们自定义优化的一部分。它的“买家当心”。 (3认同)
  • 是的,当然,我将拥有大约数百万个文件,每个文件包含 10 行派生模块。我以为 RequireJS 承诺了有效性...... (2认同)