我如何noConflict requireJS require / define方法?

时间:2013-09-05 21:44:08

标签: javascript requirejs

寻找requirejs.noConflict(),或以某种方式从库中删除全局足迹。我的用例是我正在编写一个小部件,可以在第三方页面中运行,该页面可能已经定义了requiredefine(以及之前版本的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,但我希望有一个官方的无冲突解决方案。

由于所有与jQuery相关的noConflict()问题,很难谷歌这个。

1 个答案:

答案 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变量。