有没有办法在Require.js中定义全局依赖项?

mac*_*ost 2 requirejs

背景故事:

我目前使用网站获得了Require.js和jQuery/Backbone.js.到现在为止,jQuery和Backbone都不在Require之外,让我这样做:

define([], function() {
    // NOTE: Using Backbone and $ without an import!
    new Backbone.View(el: $('#foo');
});
Run Code Online (Sandbox Code Playgroud)

这非常有效:如果没有这种方法,我站点中的每个模块都必须添加Backbone/jQuery依赖项.

但是前几天我需要将一部分代码打包为外部库.我为它做了一个单独的require配置文件,一切看起来都很棒,直到我将所有文件编译("优化")到一个库文件中,并意识到Backbone/jQuery(以及相关的插件/库)不是'包括在内.

所以,我添加了一堆填充程序,并将Backbone,jQuery和所有相关库添加到Require中.但是,我仍然有大量期望$Backbone存在的模块.这应该没问题,因为Backbone/jQuery都在全局注册它们的变量,但这不是因为Require的加载顺序.

基本上,任何没有依赖关系的模块都会被破坏,因为它们在Require加载jQuery/Backbone填充程序之前加载.任何具有依赖项的模块都没有这个问题,因为jQuery/Backbone在加载时已经加载了.

似乎我唯一的选择是在没有依赖项的情况下为每个模块添加一个显式的Backbone/jQuery.虽然我有很多这样的模块,理想情况下我不想在任何地方导入jQuery/Backbone.

所以,我的问题是:有没有办法告诉要求"在加载其他所有内容之前加载这些X模块/填充程序"?或者,换句话说,有没有办法告诉要求我的所有模块都依赖于某些其他模块?

我认为将Backbone置于我最初要求的顶部:

require(['backbone', ...
Run Code Online (Sandbox Code Playgroud)

但这没有帮助; 其他无依赖模块仍然在它之前加载.

Lou*_*uis 6

我认为没有理由这不起作用:

require(['backbone', 'jquery'], function () {
    require(['main']);
});
Run Code Online (Sandbox Code Playgroud)

我们的想法是在一个require加载Backbone和jQuery 的调用中将你的初始入口点包装到你的应用程序中.如果应用程序的模块只是因为main需要而加载(也就是说,如果require其他地方没有加载任何需要的模块的调用main),那么使用上面的代码保证在使用任何模块之前加载Backbone和jQuery由main是.