4

是否可以在一个地方配置 requirejs 并在模块中重用它?

主.js:

requirejs.config({
    baseUrl: "static/js", 
    paths: {
         "jquery": "http://code.jquery.com/jquery-1.9.1.js",    
     "jquery-ui": "http://code.jquery.com/ui/1.10.2/jquery-ui.js"
},
shim: {
     "jquery-ui": {
          deps: ["jquery"]
     }
}
}); 

公共.js:

define(["main", "jquery", function(main, $) {
    // do some public stuff
});

客户端.js:

define(["main", "jquery", function(main, $) {
    // do some client stuff
});

在我的网络公开部分有

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

在网络的客户端部分

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

而且我还想为每个页面设置一个模块。因此,例如在公共上有一个索引模块

<script ...>
    require('public/index');
</script>

公共/index.js:

define(["jquery", "slideshow"], function($, s) {
    $( function() { s.init() } );
});

RequireJS 有可能吗?

谢谢你的回答。

4

2 回答 2

8

data-main在非常简单的情况下是一个有用的快捷方式,但除此之外我发现它并没有太大用处,解决方案是完全转储它。

在每个页面上显式加载 main,然后使用回调加载特定于视图的脚本。

所以你有public.html:

<script src="/Scripts/require.js"></script>
<script>
require('main', function(){
  require('public');
})
</script>

在client.html中:

<script src="/Scripts/require.js"></script>
<script>
require('main', function(){
  require('client');
})
</script>

我在这里写了一篇博文来阐述这个想法。

于 2013-06-13T15:15:51.643 回答
0

当您使问题更清楚时,我会编辑我的答案。

在您包含的任何页面require.js中,您还应该包含main.js以定义您的 RequireJS 配置。

你不能做类似的事情

define(["main", "jquery", function(main, $) {
    // do some public stuff
});

因为 ReuiqreJS 异步加载依赖项。尽管 "main" 放在 "jquery" 之前,但不能保证 RequireJS 会按该顺序加载它们。

所以你的 public/index.html 可以像:

<script type="..." src="js/require.js"></script>
<script type="..." src="js/main.js"></script>
<script ...>
    require('public/index');
</script>
于 2013-04-17T18:17:52.043 回答