可以将多个require(require.js)实例一起使用

时间:2013-01-17 19:57:46

标签: javascript requirejs

我认为我需要在一个页面中支持多个require实例,并且遇到了两个问题,使它成为现实。我正在开发一种服务,为外部客户端页面提供可嵌入的交互式对象。最重要的设计标准很容易嵌入,尽可能少地假设客户端环境,并在客户端页面的js / css世界中很好地发挥作用。客户端向其页面添加脚本标记以加载加载器,然后他们使用内联脚本加载他们想要的内容:

<script src="http://server.net/loader"></script> 
<script>               
       special_require(["loader"], function(loader) {
           loader.load({
               object: "objectname",
               target: "#where-i-want-it"
               // other config settings
           })
       })
   </script>

加载器在匿名函数中运行require.js源,对其进行配置,然后导出require和define作为命名空间的全局变量(让我们称之为special_require和special_define)。然后有几个模块是special_defined,最后是“loader”:

// Using strategy 2 from http://requirejs.org/docs/faq-advanced.html#rename to 
// namespace require so it doesn't conflict with code on client sites.
;(function() {
    // Here, we use Jinja to drop in require.js, which will define itself in 
    // this non-global namespace.
    {% include 'loader/require.js' %}

    require.config({
        ...
    })
    window.special_require = require
    window.special_define = define
})()

special_define("loader", [...], function(...) { ... })

在大多数情况下,这非常有效。我能够将我的要求与客户端页面中的任何要求完全分开,我轻轻地踩在客户端的js全局命名空间上。但是:

  1. 如果客户端页面恰好正在加载require并使用data-main属性调用它,我的require会显示并尝试加载他们的数据主脚本对我的baseUrl,我们收到加载错误。我可以修改我的require的来源,所以它不再寻找data-main属性。有更清洁的解决方案吗?

  2. require社区非常清楚页面上不应该有多个require实例。 require.js源代码不会重复,以避免重复。所以我很紧张,因为走这条路,我正在为自己的困境做好准备。也就是说,我对使用客户端的require实例(使用我自己的加载上下文)更加紧张。要求1.2,2.0和2.1是不兼容的,我不知道我在使用什么。我是否只是在一个不寻常的情况下才有必要运行?我找麻烦了吗?有没有办法加载require.js并允许它在可能的情况下遵从现有的需求,同时仍然保证我有特定版本的require?

1 个答案:

答案 0 :(得分:0)

我认为可以。请参阅此处以获取示例:http://requirejs.org/docs/api.html#multiversion

相关问题