【问题标题】:Load timeout for modules with requirejs使用 requirejs 加载模块的超时
【发布时间】:2013-11-29 14:30:57
【问题描述】:

我正在使用 requirejs 来加载一些库和依赖项。

当我只加载 jQuery 时,它运行良好:

ma​​in.js

require.config({
  shim: {
    jquery: {
      exports: '$'
    }
  },
  paths: {
    jquery: 'vendor/jquery'
  }
});

require([
  'vendor/jquery',
  'app/init'
]);

app/init.js

define(
  ['jquery'],
  function ($) {
    $(document).ready(function () {
      console.log('domready');
    })
  }
)

但是当我尝试添加 下划线 时,在网络面板中文件已正确加载,但在控制台中我得到一个

未捕获的错误:模块加载超时:下划线

发生了什么事? 我还尝试了 require.config 中的 waitSeconds: 200 选项,但没有成功。

下面的最终(坏掉的)代码作为参考:

ma​​in.js

require.config({
  shim: {
    jquery: {
      exports: '$'
    },
    underscore: {
      exports: '_'
    }
  },
  paths: {
    jquery: 'vendor/jquery',
    underscore: 'vendor/underscore',
  }
})

require([
  'vendor/jquery',
  'vendor/underscore',
  'app/init'
])

app/init.js

define(
  ['jquery', 'underscore'],
  function ($, _) {
    $(document).ready(function () {
      console.log('domready');
    })
  }
)

【问题讨论】:

  • 我有同样的问题,现在我发现错误并检查其类型是否超时,如果是,则重新加载浏览器。希望有人帮忙
  • @RanaDeep 我也希望如此,我尝试加载另一个库而不是下划线(即 iScroll),但我仍然遇到同样的错误。

标签: javascript requirejs underscore.js amd


【解决方案1】:

definerequire 调用中,您有时将您的模块称为"vendor/<name of module>",有时称为"<name of module>"。这是错误的。根据您显示的配置,您应该在所有requiredefine 调用中将您的模块称为"<name of module>"。因此,请始终将 jQuery 和 Underscore 称为 "jquery""underscore",而不是 "vendor/...。当您使用完整路径引用它们时,您会绕过 shim 配置。

实际上,您可以将require 调用更改为:

require(['app/init']);

你不需要在那里引用 jQuery 和 Underscore。由于define 需要它们,它们将在加载app/init.js 时加载。

(另外,相对较新的 jQuery 版本不需要 shim,因为 jQuery 检测到它是由与 AMD 兼容的加载器加载并调用 define 本身。这不是问题的根源,但它很好知道。)

【讨论】:

  • 我遇到了同样的错误。但这个答案不是我的情况的解决方案
  • @Anenth 超时有多种原因。这里的答案解决了问题中提出的内容。不是所有可能的情况。
  • @Louis 它在本地工作。在互联网速度较低的生产环境中引发此错误。 :(
  • 一个可能的解决方案! stackoverflow.com/questions/14279962/…
猜你喜欢
  • 2012-09-09
  • 2015-08-22
  • 2017-08-22
  • 1970-01-01
  • 2012-01-24
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多