Javascript 组合Require.js和Backbone.js/underline.js时出现问题

Javascript 组合Require.js和Backbone.js/underline.js时出现问题,javascript,html,backbone.js,requirejs,underscore.js,Javascript,Html,Backbone.js,Requirejs,Underscore.js,我以前读过一些帖子,其中其他成员和我有相同的错误消息,但他们接受的解决方案似乎没有帮助 基本上,当我尝试加载index.html时,我会在Chrome控制台中看到这一点: Uncaught Error: Module name "underscore" has not been loaded yet for context: _. Use require([]) 几秒钟后,会显示: Uncaught Error: Load timeout for modules: underscore,bac

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

基本上,当我尝试加载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
Chrome网络工具不会显示任何异常,直到day_view.js加载正常(200 OK)为止

文件结构

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>
...
day\u view.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
    };
});
define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) {
    function render() {
        ...
    }
...
这终于奏效了

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
    };
});


您可以使用上面的垫片,也可以使用jrburke的**AMD兼容主干/下划线分叉:

这使您可以简单地执行以下操作:

require.config({
    paths:{
        jquery:'jquery/jquery-min',
        underscore:'underscore/underscore-min',
        backbone:'backbone/backbone-min'
    }
});

define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) { ...
坦率地说,我发现叉子比使用垫片更容易/更干净/更坚固


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

PS好消息,下划线1.6.0现在支持requirejs定义

下面的版本需要填隙片,或者需要下划线.js,然后盲目地希望“u”全局变量没有;(公平地说,这是一个公平的赌注)

只需通过

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

不需要加垫片:)

这个问题可能会对你有所帮助:@jantimon我读过这篇文章,但我看不到任何有助于解决我目前困境的东西。你觉得我有什么特别应该读的吗?我也读过这个(),但我也找不到原因。试试看
shim={…deps:[“下划线”,“jquery”]…}
@jantimon也不起作用。与上述问题相同的错误消息。并且按照@jantimon所说的去做!
  requirejs.config({
    paths: {
        "underscore": "PATH/underscore-1.6.0.min",
    }
  });