3

私のプロジェクトでは、RequireJSを使用して、次のようにアプリをブートストラップしたいと思います。

requirejs.config({
baseUrl: 'scripts/vendor',
paths: {
    jquery: [
        'https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min',
        'jquery'
    ],
    angular: [
        'http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.min',
        'angular'
    ],
    app: '../app'
}
});

require(['require', 'jquery', 'angular', 'app'], function(require, $, angular, app) {
console.log(require);
console.log($);
console.log(angular);
console.log(app);
});

私のindex.htmlでは、RequireJSのみがスクリプトタグを介してロードされます。ここで、RequireJSは上記のコードをロードします。動作するもの:-ネットワークモニターで、RequireJS、jQuery、Angular、およびアプリが読み込まれていることがわかります-console.logメッセージは、require、jQuery、およびappに対して正しく出力されます

角度のあるオブジェクトはどういうわけか未定義です。しかし、CDNからロードせず、ローカルロードを使用すると、機能します。ローカルファイルは、次のようなRequireJSラッパーです。

define(['/components/angular/angular.min.js'], function () {
    return angular;
});

AngularのCDNでこれを機能させるにはどうすればよいですか?それとも、これはAngularからのサポートに依存していますか?

4

1 に答える 1

2

まず、「パス」と「シム」を混同しています

パスは適切です。「シム」動作を行わないでください。ただし、「パス」を適切にする必要があります。

paths: {
    jquery: 'https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min',
    // NOTE: angular is "plain JS" file
    angular: 'http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.min',
    app: '../app'
}

次に、何かを返してもらう必要性を手放す必要があります...「フォースを使用してください、ルーク」:)必要なときに適切なグローバルがそこにあることを期待してください:

require(['jquery', 'app', 'angular'], function($, app, thisValueDoesNotMatter) {
    // you don't need to wrap "require" Just use global
    console.log(require);
    console.log($);
    console.log(app);

    // note, angular is loaded as "plain JavaScript" - not an AMD module.
    // it's ok. It returns "undefined" but we just don't care about its return value
    // just use global version of angular, which will be loaded by this time.
    // because you mentioned it in your dependencies list.
    console.log(window.angular);
});
于 2013-02-05T19:31:24.903 に答える