寻找requirejs.noConflict()
,或以某种方式从库中删除全局足迹。我的用例是我正在编写一个小部件,可以在第三方页面中运行,该页面可能已经定义了require
和define
(以及之前版本的requirejs或者甚至是另一个库)。
我自己尝试过这个,但它大部分都有效。为简单起见,我们假设我不恢复原始值,只删除足迹。我在data-main中做了类似的事情:
var mycontext = requirejs.config({context : 'asdf', baseUrl : 'http://foo.com' });
mycontext(['require','foo'], function (require, foo) {
var f = require('foo');
});
// namespace cleanup
window.requirejs = undefined;
window.require = undefined;
window.define = undefined;
这里的问题是来自f
的{{1}}值返回null,但仅当我执行命名空间清理时。这闻起来像requirejs中的一个bug,但我希望有一个官方的无冲突解决方案。
答案 0 :(得分:0)
RequireJS文档has a section on this标题为“如何向其他不依赖于其他人的图书馆提供图书馆?”
您还可以查看the example build file,其中显示了如何使用wrap
。
这是如何运作的一个很好的例子是Flight library。
默认情况下,该库使用AMD,但有一个独立版本,它包含匿名函数中的所有模块,并在顶部包含一个微小的require / define API(为此,它们使用their own build tool)。可以找到来源here。
请注意,要使其工作,所有模块都需要ID,但r.js优化器将为您处理。
使用这些技术应该允许您单独保留任何已定义的require / define变量。