【问题标题】:RequireJS build error [RangeError: Maximum call stack size exceeded]RequireJS 构建错误 [RangeError: 超出最大调用堆栈大小]
【发布时间】:2014-08-20 08:22:10
【问题描述】:

我正在尝试使用 requirejs:production 任务构建我的 Grunt/RequireJS 应用程序,我得到以下输出:

Running "requirejs:production" (requirejs) task
>> Tracing dependencies for: ../bower_components/almond/almond
>> RangeError: Maximum call stack size exceeded
>> In module tree:
>>     main
>>       models/session
>>         views/root
>>           navigation
>>             permissions
>>               text
{ [Error: RangeError: Maximum call stack size exceeded
In module tree:
    main
      models/session
        views/root
          navigation
            permissions
              text
]
  originalError:
   { [RangeError: Maximum call stack size exceeded]
     moduleTree:
      [ 'text',
        'permissions',
        'navigation',
        'views/root',
        'models/session',
        'main' ],
     fileName: '/Users/zensavona/softwaredev/projects/haze/t3-web/web-admin/src/main/bower_components/text/text.js' } }

我认为它正在谈论的代码是:

define(["backbone", "models/permissions", "text!/ducks/api/Permissions/Current"],
  function(Backbone, Permissions, permissionJSON) {
    if (permissionJSON.indexOf("<center><h2>Login</h2></center>") > -1) {
      return new Permissions();
    } else {
      var data = JSON.parse(permissionJSON);
      return new Permissions(data);
  }
});

我的第一直觉是某种循环依赖(?),但我看不到。这与我的代码或text 模块有关吗?

【问题讨论】:

  • 您是否尝试在您的r.js config 中设置inlineText:false?您的错误看起来与尝试在构建时读取运行时信息一致。但是,您的问题和解决方案/解决方法表明存在架构问题以及混合抽象和关注点。这只是乞求使用 JS 承诺,很可能会稍微改变你的逻辑。
  • @kryger 我遇到了同样的问题,并用您的解决方案解决了它。谢谢!

标签: javascript backbone.js requirejs gruntjs bower


【解决方案1】:

我在 requireJS 2.1.15 中遇到了这个问题。问题似乎是html 扩展不是路径的一部分。

define([
    ...
    'text!templates/user/elements/profile.moderate.menu' //.html extension is missing
]...

添加扩展程序后,一切都开始了

define([
    ...
    'text!templates/user/elements/profile.moderate.menu.html'
]...

【讨论】:

    【解决方案2】:

    FWIW,我无法解决这个问题,并通过一起删除 text 来修复它。幸运的是,这是我唯一需要它的地方,我用 async: false jQuery 调用替换了它(见下文)。

    define(["jquery", "backbone", "models/permissions"],
      function($, Backbone, Permissions) {
        var permissionJSON = "";
        $.ajax({
            type: "GET",
            url: '/ducks/api/Permissions/Current',
            async: false,
            success: function(data) {
              permissionJSON = data;
            }
        });
    
        if (permissionJSON.indexOf("<center><h2>Login</h2></center>") > -1) {
          return new Permissions();
        } else {
          return new Permissions(permissionJSON);
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-21
      • 2018-02-06
      • 2019-05-14
      • 2021-07-31
      • 2019-02-07
      • 2012-08-14
      相关资源
      最近更新 更多