gpt4 book ai didi

javascript - require (require.js) 的多个实例可以很好地协同工作吗

转载 作者:数据小太阳 更新时间:2023-10-29 04:21:36 31 4
gpt4 key购买 nike

我想我需要在一个页面中支持多个 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 加载他们的 data-main 脚本,我们会收到加载错误。我可以修改我的 require 的来源,以便它停止寻找 data-main 属性。有没有更清洁的解决方案?

  2. require 社区非常清楚,一个页面上不应有多个 require 实例。 require.js 源代码竭尽全力避免 self 复制。所以我很紧张,因为我走这条路会给自己带来麻烦。也就是说,我更担心可能会使用客户端的 require 实例(使用我自己的加载上下文)。 Require 1.2、2.0 和 2.1 不兼容,我不知道我在使用什么。我是否只是处于一种不寻常的情况下,需要单独运行才有意义?我要惹麻烦了吗?有没有一种方法可以加载 require.js 并允许它在可能的情况下推迟到现有的要求,同时仍然可以保证我有特定版本的要求?

最佳答案

我觉得可以。示例见此处:http://requirejs.org/docs/api.html#multiversion

关于javascript - require (require.js) 的多个实例可以很好地协同工作吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14387092/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com