RequireJS未定义的别名变量

时间:2012-11-15 21:10:54

标签: javascript requirejs

因为我需要服务器端的重要设置,所以我需要将主文件放在HTML文件中。但我现在的问题是别名文件仍然加载,但不能作为变量使用。 (也不在app.js文件或其他定义的文件中。)所以当我这样做时:(见HTML页面底部)

require([
  'jquery'
   'app'
], function($, App) {
   alert($);
   App.initialize();
});

警报将显示未定义的变量,但是当我查看我加载的文件时。加载了jQuery文件。 (与下划线和主干变量相同的问题,但不是app变量,只有别名的问题。) 你知道如何解决这个问题吗?

<html>
<head>
<title>Domain.net</title>

<link rel="stylesheet" href="css/reset.css" />
<link rel="stylesheet" href="css/style.css" />
<script src="js/lib/modernizr.js"></script>

<script src="js/lib/require.js"></script>
<script type="text/javascript">
// Require.js allows us to configure shortcut alias
require.config({
    baseUrl: "js",
    paths: {
        jquery: 'lib/jquery',
        underscore: 'lib/underscore',
        backbone: 'lib/backbone',
        templates: '../templates'
    }
});

define('config', function() {
    return {
        /** My serverside config */
    }
});

//Load the App
require([
    'jquery',
    'app'
], function($, App) {
    alert($);
    App.initialize();
});
</script>

1 个答案:

答案 0 :(得分:1)

我不确定您使用的是哪个版本的jQuery,但如果它不是1.7或更高版本,则默认情况下它不支持amd,这可以解释为什么你得到undefined。在这种情况下,最好的解决方案是更新它。

或者,尝试在您的配置中添加shim exports: jQuery

require.config({
    baseUrl: "js",
    paths: {
        jquery: 'lib/jquery',
        underscore: 'lib/underscore',
        backbone: 'lib/backbone',
        templates: '../templates'
    },
    shim: {
        jquery: {
            exports: 'jQuery'
        }
    }
});

另请注意,您设置服务器端配置的方式很容易出现竞争情况,请参阅此answer