Require.js不清楚

时间:2012-05-29 14:19:18

标签: javascript backbone.js require

我正在尝试使用requirejs并加载外部供应商js并隐藏Backbone或Underscore等全局变量。

这是我的代码:

<script data-main="./main" src="<?php echo $rootRequirejs?>/require.js"></script>
<script type="text/javascript">
    require.config({
        baseUrl: "/web/js",
        paths: {
            "jquery": "/vendor/js/jquery-1.7.1.min",
            'underscore': '/vendor/js/underscore-min',
            'backbone': '/vendor/js/backbone-min'
        }
    });

这是我的问题:

1) 如果我去javascript控制台,我写Backbone或下划线,他们被定义.... 我认为它不应该从控制台访问,而只能从我的main.js文件中访问 为什么他们是全球性的?

2 个答案:

答案 0 :(得分:1)

默认情况下,由于库本身(主干等)的编写方式,它们将是全局的 - 它们明确地使用全局空间(b / c很好,这就是js的工作原理)。你试过the AMD-forks这些库吗?

可能是一个更好的选择,如Florian在上面的评论中指出的那样是使用Require2.0,因为它现在附带"shim" feature,它可以帮助你使用非AMD的libs ...虽然我不确定将消除全局变量。

fwiw,除非你有特别的理由要避免全局,否则它们通常不是那么大的交易。

答案 1 :(得分:0)

您可以使用包含在AMD模块中的那些库的amd版本,这应该避免使用全局变量:

https://github.com/amdjs/backbone

https://github.com/amdjs/underscore

它们由RequireJS的作者James Burke维护。

希望这能解决你的问题!