这个问题以前已经回答过很多次了,我知道一个解决方案是简单地改变它,这样(Esri的)dojo是最后加载的。
问题是我正在处理一个模块化的小部件,它不能访问页面的html来改变顺序,我必须只通过Dojo的AMD加载器加载库。
文件夹结构:
/Widget
--/Main.js
--/Datatable.js
这是Main.js文件:
define([
'./Datatable',
'https://code.jquery.com/jquery-3.3.1.min.js',
'https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.bundle.js',
],
function(Datatable){ ... }
和Datatable.js(只是我为组织创建的另一个模块):
define([
'https://cdn.datatables.net/v/bs4/dt-1.10.18/r-2.2.2/datatables.min.js'
],function(){ ... }
我在这里有两个主要问题:
1)AMD加载程序是异步的,并且不解析非AMD模块依赖项,这意味着顺序应该很重要datatables.min.js
需要bootstrap.bundle.js
,而bootstrap.bundle.js
需要jquery-3.3.1.min.js
所以,如果我幸运的请求将加载顺序取决于延迟,不是很可靠...
2)Bootstrap和Datatable通用javascript文件都引发了一个“multipleDefine”错误,可能是因为它们试图定义“jquery”,我真的不知道如何修复这个错误(拥有一个本地编辑的副本并不理想)
如何解决这两个问题?
1条答案
按热度按时间xurqigkl1#
对于订单,您可以执行以下操作:
这将强制按特定顺序执行决议。
当两个组件尝试在全局范围(这里是
window
)上创建函数define
时,会引发multipleDefine
错误。很难给予一个完美的答案。
如果你能装个小提琴之类的东西,我就能看得更清楚。
我想到一件事:你可以尝试
delete window.define
的权利之前,加载的文件抛出的错误之一...但这是丑陋的,甚至可能不工作...