3

私はこのようにレイアウトされたプロジェクトを持っています:

  • ライブラリ/
    • bar.js
    • curl.js
  • ソース/
    • foo.js
  • テスト/
    • test.html

私のtest/test.htmlファイルには、次のものがあります

<script type="text/javascript" src="../lib/curl.js" charset="utf-8"></script>
<script type="text/javascript" charset="utf-8">

  curl(['../src/foo'], function (Foo) {
    console.log(Foo);
  });

</script>

これは失敗し、唯一の回避策は、curl.js をロードする前に以下を含めることです。

<script>

  curl = {
    paths: {
      src: '../src'
    }
  };

</script>

したがって、私の最初の質問は、ディレクトリ内の単一のファイルにリンクしたいだけなのに、なぜこのようにパスを設定しなければならないのかということですsrc/

最初の問題が修正されたと仮定すると、私の 2 番目の問題は 内にありますsrc/foo.js。そのファイルに依存関係を持たせたいlib/bar.jsので、次のように記述します。

define(['../lib/bar'], function (Bar) {
  return Bar;
});

悲しいかな、これは curl.js がロードしようとしていて、私が望むようには機能しませtest/lib/bar.jslib/bar.js。唯一のオプションがpathscurlのオブジェクトを指定することである場合、src/foo.jsモジュール内でそれを行うことは可能ですか、それともファイル内ですべて行う必要がありtest/test.htmlますか?

4

1 に答える 1

3

私の最初の質問は、src/ ディレクトリ内の単一のファイルにリンクしたいだけなのに、なぜこのようにパスを設定しなければならないのかということです。

良い質問。これはバグと言えそうです。おそらくこれを修正する必要がありますが、これは大きな問題ではありません。説明させてください....

curl.js は、モジュールが「パッケージ」にバンドルされている複雑なプロジェクトを対象としています。CommonJS/NodeJS パッケージと概念が非常に似ています。パッケージでは、「../」を使用してパッケージから別のパッケージに移動することは意味がありません。実際、私たちの多くは、これでエラーが発生するはずだと考えています。残念ながら、この場合、curl.js は黙って失敗します (これは間違いなくバグです)。

表示されているバグは、パッケージを使用していないときに curl.js がパッケージ ナビゲーション ロジックを適用している可能性があります。(うーん、いつも私にはバグのように聞こえます。:))

したがって、通常、curl.js には構成が必要です。この構成の最も重要な部分は baseUrl です。baseUrl は、アプリケーションのルートが存在する場所を curl に伝えます。あなたの場合は「..」です(「../」と書くこともできますが、カールは内部的に末尾の「/」を切り捨てます.

グローバルでカールを事前に構成する必要はありません。このように初めて curl() を呼び出すときに構成を含めることもできます。

curl({ baseUrl: '..' }, ['src/foo'], function (Foo) {
    console.log(Foo);
});

それがあなたの2番目の質問にも答えていると思います。パスを構成する代わりに baseUrl を使用できます。ただし、モジュールの編成を開始すると、パスは最終的に便利になります。たとえば、パスは、この「lib/jquery-1.8.0/jquery.min.js」のような厄介なパスを単に「jquery」に変換できます。

curl({ baseUrl: '..', paths: { "lib/jquery-1.8.0/jquery.min.js": "jquery" });

実際、パスよりもパッケージをお勧めします。ノードとブラウザーの両方で実行できる CommonJS パッケージを作成する人が増えるにつれて、それは避けられなくなる可能性があります。さらに、curl.js の compile-to-javascript 機能をパッケージに組み込む予定です。

私が助けてくれることを願っています。:)

于 2012-08-10T17:24:32.443 に答える