1

以前にrequireを使用していましたが、この問題に遭遇したことはありません。パスがどこかで間違っている可能性がありますが、これは私のファイル構造です:

js
├───main.js
│
├───app
│   ├───app.js
│   ├───hello.js
│   ├───world.js
│   │
│   └───models
│       └───game.js
│
└───vendor
    ├───jquery.js
    └───require.js

main.js

require.config({
    paths: {
        'jquery':   '../js/vendor/jquery'
    },
    shim: {
        'jquery': {
            exports: '$'
        }
    }
});

require(['app/app', 'jquery', 'app/models/game'], function (App, $, Game) {
    console.log(arguments);
    $(function () {
        console.log('why is my App undefined?', App);
        App.init();

    });
});

アプリ/app.js

define('App', ['hello', 'world'], function (hello, world) {

    var App = {};

    App.init = function () {
        alert(hello + ' ' + world);
    };

    return App;
});

コードは問題なく起動しますが、依存関係が app または hello または world モジュールで失敗しているように見えます。App は undefined としてログを記録し、ゲーム モジュールも同様です。

app/app は私の App モジュールへの正しいパスである必要がありますか、それとも間違っていると思いますか?

アップデート

App の大文字 A で問題が解決したと思いました (しかし、同時に Jlange のコメントに一喜一憂したので、app/Appからモジュールを起動しましたindex.html。これは問題ないように見えましたが、開発を続けた後、再び発生しました。

すべてのモジュールを同じディレクトリに問題なくロードできますが、サブディレクトリからモジュールをロードすることはできません。

最初の例のように、アプリ/アプリをメイン モジュール内からロードできなかったため、アプリ/アプリ モジュールはモデル/ゲーム モジュールをインポートできません。

前に言ったように、これが何であるかは文字通りわかりませんが、requirejs を使用してこの問題に遭遇したことはありません。

更新 2 名前付きモジュールをすべてドロップすれば、機能させることができます。

define([dependencies], function (dependencies) {});

それは正常に動作しますが、名前付きモジュールに変更するとすぐに見つかりません

define("moduleA", ['subdir/moduleB'], function (moduleB) {
    console.log(moduleB); // >> undefined
});
define("subdir/moduleB", [dependencies], function (dependencies) { return 'B'; });
4

1 に答える 1

2

編集済み

上記のコードを修正するために何度も試み、requirejs のヘルプ ページを読んだ後、名前付きモジュールを使用せず、オプティマイザーに名前を付けさせるのが最善であるという小さな一節を見つけました。

そこで、すべてのモジュール名を削除することにしました

moduleA.js

define(['subdir/moduleB'], function (moduleB) {
    console.log(moduleB); // >> 'B'
});

サブディレクトリ/moduleB.js

define([dependencies], function (dependencies) { return 'B'; });

これは問題なく動作します...これらのmoduleNamesの使用をどのように修正したかわかりません。モジュールに名前を付ける方がよいと思いました。

于 2013-03-18T23:51:18.547 に答える