我必须在应用程序中的所有非AMD js lib中使用RequireJS中的Shim吗?

时间:2014-03-03 18:04:34

标签: jquery-plugins requirejs

现在我们的应用程序具有以旧时尚方式加载的脚本,并且应用程序的一部分都是RequireJS&骨干视图/模型。我们在live上有一些RequireJS脚本加载错误(通过ajax通过前端onError集合),这在dev中是不可重现的。

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

在Shim中加载所有东西会有什么好处?我可以看到许多旧脚本需要修改才能要求RequireJS中的某些脚本。

2 个答案:

答案 0 :(得分:0)

您只需要为要使用RequireJS 加载的非AMD代码使用填充程序。使用<script>标签加载非AMD代码非常好,只要您不希望RequireJS将此代码识别为模块即可。我实际上已经做到了。没问题。

  

在Shim中加载所有东西会有什么好处?

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

答案 1 :(得分:0)

如果您的库是1)而不是AMD和2)附加到窗口,您可以使用requirejs拉动该库,而不希望使用它的导出。

因此,例如,最新的jquery附加到窗口。让我们假装已经不符合AMD标准。

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

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