2016-04-22 2 views
0

開発中のJavaScriptライブラリに対してRequireJSを使用することに決めました。私はRequireJSのことではなく、私たちのライブラリのモジュール名が私たちのライブラリを使用するアプリケーションのモジュールと確実に衝突しないようにするために何をしなければならないのだろうかと思います。例えば、私はモジュールencoding.jsを定義する場合:名前衝突によりRequireJSでJavaScriptライブラリを構築

define("encoding", ["dependency"], function(myDep) { 
    ... 
}) 

私のライブラリを使用し、独自にencoding.jsを持っているアプリケーションは、名前の衝突をもたらすと思われます。ライブラリを使用するアプリケーションからライブラリ名を「保護」するために使用できるReuireJSオプションはありますか?

また、最初のパラメータ "encoding"はオプションです。私が追加した理由は、minify-maven-pluginを使ってライブラリを構築したことです。これにより、ライブラリ内のすべてのモジュールが1つのファイルになり、モジュール名を追加する必要があるようです。そうしないと、匿名のモジュール定義エラー(http://requirejs.org/docs/errors.html#mismatch)が一致しません。私は代わりにr.js最適化ツールを使うかもしれないと思います。名前衝突の問題を取り除くためにそれを設定することもできますか?

私たちは、おそらくのようなものの内部でコールを定義しカプセル化することにより、当社のライブラリRequireJSに依存しない作りますね。実際に

Creating a reusable RequireJs libraryが、それは明確な答えが得られませんでした:私はこのトピックを見つけ

(function(root, factory) { 
    if (typeof define === "function" && define.amd) { 
     define("encoding", ["dependency"], factory); 
    } else { 
     root.MyLib.Encoding = factory(MyLib.Deps); 
    } 
}(this, function() { 
    ... 
})) 

私が探していたものではありません。

答えて

0

RequireJSを使用する場合は、モジュールの名前を付けるのが一般的です(実際には推奨される方法です)。それらの名前を付けるとモジュールの移植性が低下し、最適化ツールに悪影響を及ぼします。

RequireJSはファイルに基づいてモジュール名を作成します。私の経験でうまくいきます。

だからあなたの符号化モジュール(encoding.js)は、特別なディレクトリ構造は、符号化モジュールは、そう

requirejs(["encoding", "othermodule"], 
    function (encoder, other) { 
    } 
); 
よう encoding_app.jsで使用することができ、ここでは存在しないと仮定すると、この

define(["dependency"], function(myDep) { 
    ... 
}) 

ようになります。