requirejs与现有的全局变量

时间:2014-01-16 11:15:26

标签: requirejs

我有几个全局变量(jQuery +插件,构造函数等)的构建库(连接,缩小并包含在require.js之前)。该库用作构建应用程序的基础,具有假定的依赖关系。即,如果我在库之后包含我的应用程序脚本,那么我可以自由地使用jQuery和构造函数而没有任何问题。

对于更大的应用程序,我正在考虑使用requirejs(管理应用程序中的不同模块),同时仍然使用这个构建的库。我如何将现有的全局变量如jQuery添加到require?

中的依赖列表中
<script src="pathto/lib.js" type="text/javascript"></script>
<script src="require.js" data-main="../js/app" type="text/javascript"></script>

requirejs.config({
  shim: {
    'jquery': {
        exports: '$'
    }
  },
  // jQuery is already loaded with lib.js, no need for any path...
  path : {
    jquery : 'jquery.js'
  }
});

这可能吗?或者我应该继续假设某些全局变量将存在于app模块中,因为lib.js包含在require / app js之前?

使用require来加载lib.js是不可能的,因为它是CMS的一部分。

- 编辑 -

使用命名模块怎么样,只返回全局对象的句柄,因为这是lib内容所在的位置?

define("lib", function () {
    return this;
});

require(["lib"], function (lib) { 
    // use existing globals found in lib via
    lib.jQuery
    // or simply
    jQuery
});

这允许我遵循命名依赖关系的require()约定,而不是假设。

1 个答案:

答案 0 :(得分:0)

我正在为我从CDN加载jquery的项目做同样的事情,所以我的路径配置看起来像这样

path: {
  'jquery': '//path/to/the/cdn'
}

在您的情况下,我认为您应该在更新(定义然后返回)时执行,因为在某些第三方库中,他们可能将jquery定义为依赖项。如果您的RequireJS配置中没有jquery,则必须修改第三方库的源代码