【问题标题】:Trouble combining Require.js and Backbone.js/Underscore.js无法结合 Require.js 和 Backbone.js/Underscore.js
【发布时间】:2013-05-27 13:21:14
【问题描述】:

我读过以前的帖子,其他成员也有与我相同的错误消息,但他们接受的解决方案似乎没有帮助。

当我尝试加载 index.html 时,基本上我会在 Chrome 控制台中得到这个:

Uncaught Error: Module name "underscore" has not been loaded yet for context: _. Use require([])

几秒钟后出现:

Uncaught Error: Load timeout for modules: underscore,backbone

在 day_view.js 加载正常(200 OK)之前,Chrome 网络工具不会显示任何异常。

文件结构

index.html

...
<script>
        var require = {
            deps: ["jquery/jquery-min", "underscore/underscore-min", "backbone/backbone-min"]
        };
</script>
<script data-main="scripts/main" src="scripts/require.js"></script>
...

ma​​in.js

require.config({
    baseUrl: 'scripts',

    paths:{
        jquery:'jquery/jquery-min',
        underscore:'underscore/underscore-min',
        backbone:'backbone/backbone-min'
    },

    shim: {
        underscore: {
            exports: '_'
        },
        backbone: {
            deps: ["underscore/underscore-min", "jquery/jquery-min"],
            exports: "Backbone"
        }
    },

    waitSeconds: 200
});

require(['day_view'], function (day_view) {
    function start() {
        day_view.render();
    }

    return {
        start:start
    };
});

day_view.js

define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) {
    function render() {
        ...
    }
...

【问题讨论】:

  • 这个问题可能对你有帮助:stackoverflow.com/questions/10866740/…
  • @jantimon 我读过那篇文章,但我看不出任何有助于解决我当前困境的东西。你认为我应该读什么特别的东西吗?我也读过这个(requirejs.org/docs/errors.html#notloaded),但我也找不到原因。
  • 试试shim = { ... deps: ["underscore", "jquery"] ... }
  • @jantimon 也不起作用。与上述问题相同的错误消息。
  • 也照@jantimon 说的做!

标签: javascript html backbone.js requirejs underscore.js


【解决方案1】:

这终于奏效了。

require.config({
    paths:{
        jquery:'jquery/jquery-min',
        underscore:'underscore/underscore-min',
        backbone:'backbone/backbone-min'
    },
    shim: {
        underscore: {
            exports: '_'
        },
        backbone: {
            deps: ["underscore", "jquery"],
            exports: "Backbone"
        },
        waitSeconds: 15
    }
});

require(['day_view'], function (day_view) {
    function start() {
        day_view.show();
    }
    console.log(day_view); // Empty object here?
    return {
        start:start
    };
});

define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) { ...

【讨论】:

    【解决方案2】:

    您可以使用上面的 shim,也可以使用 jrburke 的** AMD 兼容的 Backbone/Underscore 分支:

    https://github.com/amdjs/backbone

    https://github.com/amdjs/underscore

    这让你可以简单地做:

    require.config({
        paths:{
            jquery:'jquery/jquery-min',
            underscore:'underscore/underscore-min',
            backbone:'backbone/backbone-min'
        }
    });
    
    define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) { ...
    

    坦率地说,我发现前叉比使用垫片更容易/更清洁/更坚固。

    ** 仅供参考 jrburke 是 requirejs 的创建者。

    【讨论】:

      【解决方案3】:

      PS 好消息,Underscore 1.6.0 现在支持 requirejs 定义!!!

      低于此的版本需要 shims,或者需要 underscore.js 然后盲目地希望“_”全局变量没有被破坏(公平地说,这是一个公平的赌注)

      直接加载

        requirejs.config({
          paths: {
              "underscore": "PATH/underscore-1.6.0.min",
          }
        });
      

      不需要垫片 :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-28
        • 1970-01-01
        • 2013-06-17
        相关资源
        最近更新 更多