0

私のプロジェクトには、複数のファイルを含む js フォルダーがあります。js フォルダーの下にある 1 つのファイル app.js は、同じフォルダーの下にある他のファイルに依存しています。

ここ ( define() 内の相​​対モジュール名 )を読んで、「ローカルの必要」を使用すると、相対パスを使用してモジュールをロードできます。たとえば、次の場合:

js
|- app.js
|- util.js
|- logger.js

それから私はすることができます:

//in app.js
define(function(require){
 var util = require("./util");
 var logger = require("./logger");    
 ...
});

しかし、何らかの理由でこれは私にとってはうまくいきません。私が見ているのは、モジュール util と logger が、require 構成で定義した baseUrl に対して相対的に要求されていることです。

これは私が期待していたものではなく、特に私のプロジェクトには相対パスで正しく動作する他のモジュールがあるため、その理由がよくわかりません。

どんな助けでも大歓迎です。


アップデート

グローバルrequireを使用して別のモジュールからapp.jsをロードしているため、これがここで発生する可能性はありますか?

init.js には次のものがあります。

//in init.js
require(["config"], function (config) {
    require(["app"], function (app) {
    });
});

これが問題を引き起こしている可能性はありますか?

4

1 に答える 1

0

1位。requireAMD スタイルの Go へのCommonJS スタイルの呼び出しを避けるようにしてください。

CommonJS スタイル:

var result = require(resource)

AMD スタイル:

require([resource], function(result){})

RequireJS は、CJS スタイルのリソースの同期読み込みを行いません。関数の本体を検査し、定義に要件を挿入することにより、それをエミュレートします。表示されませんが、そこに書いたものは実際には次のように実行されます。

// app.js
define(['require', 'exports', 'module', './util', './logger'], function(require){
    var util = require("./util"); // <- "sync" call is ok because it's pre-loaded
    var logger = require("./logger"); // <- "sync" call is ok because it's pre-
});

あなたはそこでブードゥー教の領域に入っています。代わりに、必要なものについて明確にするようにしてください。

// app.js
define(['./util', './logger'], function(util, logger){
    ...
});

しかし、本当に「ローカル」require で遊びたい場合は、すべてのモジュール ID 解決規則が確実に適用されるように、AMD の方法で実行してください。

// app.js
define(['require'], function(require){
    require(
        ['./util', './logger']
        , function(util, logger){
            ...
        }
    )
});

また、この部分は私には意味がありません:

require(["config"], function (config) {
    require(["app"], function (app) {
    });
});

私は次のようになると予想"app"します-"js/app"の値は何ですか?baseUrl'js'

app.js 定義のパスは正しく見えますが、RequireJS の解決方法"app"に問題がある可能性があります。

于 2013-03-12T18:26:36.637 に答える