Jquery plugins 我必须为应用程序中的所有非AMD js库使用RequireJS中的垫片吗?

Jquery plugins 我必须为应用程序中的所有非AMD js库使用RequireJS中的垫片吗?,jquery-plugins,requirejs,Jquery Plugins,Requirejs,现在,我们的应用程序有以旧方式加载的脚本,应用程序的一部分都是RequireJS和主干视图/模型。我们在live上(通过ajax的前端onError集合)出现了一些RequireJS脚本加载错误,这些错误在开发人员中是不可复制的 我们怀疑这是一些脚本以旧方式加载的方式,而其他脚本则使用shim和requireJS。这可能是问题所在吗?该怎么办?我们是否应该将每个非AMD JS文件(例如jquery插件)添加到Shim中 在Shim中加载所有内容有什么好处?我可以看到,我们的许多旧脚本将需要修改,

现在,我们的应用程序有以旧方式加载的脚本,应用程序的一部分都是RequireJS和主干视图/模型。我们在live上(通过ajax的前端onError集合)出现了一些RequireJS脚本加载错误,这些错误在开发人员中是不可复制的

我们怀疑这是一些脚本以旧方式加载的方式,而其他脚本则使用shim和requireJS。这可能是问题所在吗?该怎么办?我们是否应该将每个非AMD JS文件(例如jquery插件)添加到Shim中


在Shim中加载所有内容有什么好处?我可以看到,我们的许多旧脚本将需要修改,以需要来自RequireJS的某些脚本。

您只需要对要随RequireJS加载的非AMD代码使用垫片。使用
标记加载非AMD代码是很好的,只要您不希望RequireJS将此代码识别为模块。我真的做到了。没问题

在Shim中加载所有内容有什么好处

这个问题的答案取决于应用程序的具体情况以及要加载的内容的具体情况。在我的应用程序中,使用垫片加载每一段非AMD代码绝对没有任何好处。

如果您的库1)不是AMD,2)连接到窗口,您可以使用requirejs将该库拉入,而不希望使用其导出

例如,最新的jquery附加到窗口。让我们假设它还不符合AMD标准

define(['someview', 'jquery'], function(someview) {
  $('body').append(someview());
});

requirejs将加载jquery并在执行回调之前对其进行评估。事实上,它不是AMD兼容是无关紧要的。这非常合适,我认为这比在页面中放置脚本标记更合适。您的代码应该声明其所有依赖项,无论这些依赖项是否导出或是否符合AMD。只需将它们作为依赖项数组中的最后一个条目。

将要求在使用
加载常规非AMD代码之前加载JS?即使我们在requireJS之前的
中添加了script标记,除非您在
中明确指定
async
属性,否则脚本将按照HTML中显示的顺序加载和执行。谢谢,正如我所想的,但我就是不明白为什么live上会有这么多加载错误。我必须使用R进行生产吗?(假设R==RequireJS。)如果您使用RequireJS进行开发,我不知道没有它,生产如何运行。有人可能会说这不是“RequireJS”,但我怀疑这会对你在这里的报道产生影响。像您报告的内容这样的问题通常是由于某些依赖关系在某个方面被遗漏了。开发人员和生产人员之间的时间差异导致缺少的依赖关系仅在开发人员或生产人员中成为问题。(我都见过)我指的是R.js优化程序。我们没有将所有的JS文件合并成一个文件。我不知道这是否能解决装载问题。