1

我正在尝试使用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 文件中访问。
为什么它们是全球性的?

4

2 回答 2

1

由于库本身(骨干网等)的编写方式,这些默认情况下将是全局的 - 它们明确使用全局空间(b/c 很好,这就是 js 的工作方式)。您是否尝试过这些库的 AMD 分支?

正如弗洛里安在上面的评论中指出的那样,也许一个更好的选择是使用 Require2.0,因为它现在带有一个“垫片”功能,可以帮助您使用非 AMD 库......虽然我不确定这会消除全局变量.

首先,除非您有特定的理由避免使用全局变量,否则它们通常没什么大不了的。

于 2012-05-29T14:39:01.017 回答
0

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

https://github.com/amdjs/backbone

https://github.com/amdjs/underscore

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

希望这能解决您的问题!

于 2012-05-29T14:35:43.067 回答