JQuery、RequireJSなどのサードパーティのライブラリを利用したカスタムJavaScriptライブラリを作成しています。私の特別なケースではDojoです。カスタムライブラリでは、ホストアプリケーションに依存関係を見えないようにするにはどうすればよいですか?
私のライブラリを使用するには、他のほとんどのライブラリと同様にスクリプトタグを追加する必要があります。しかし、これらのリンク
http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml https://www.sitepoint.com/dynamically-load-jquery-library-javascript/
function loadjscssfile(filename, filetype){
if (filetype=="js"){ //if filename is a external JavaScript file
var fileref=document.createElement('script')
fileref.setAttribute("type","text/javascript")
fileref.setAttribute("src", filename)
}
else if (filetype=="css"){ //if filename is an external CSS file
var fileref=document.createElement("link")
fileref.setAttribute("rel", "stylesheet")
fileref.setAttribute("type", "text/css")
fileref.setAttribute("href", filename)
}
if (typeof fileref!="undefined")
document.getElementsByTagName("head")[0].appendChild(fileref)
}
で説明したように、私は以来、動的にサードパーティの依存関係(道場)をロードするために考えていたことが最初にロードマイライブラリ内
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Host Application</title>
</head>
<body>
<div>Host Application</div>
<script src="~/Scripts/myLibrary/myLibrary.js"></script>
</body>
</html>
ユーザーが私のライブラリーがDojoを使用していることを知らないかもしれない私はアプリケーションにDojoを組み込むシナリオを心配しています。だから、基本的に、彼らはすべきではない、さらにmyLibrary.js
...
<script src="~/Scripts/myLibrary/myLibrary.js"></script>
<script src="~/Scripts/dojo-release-1.10.6/dojo/dojo.js"></script>
...
私は本当にユーザーが呼び出すと依存関係を使用することができるようにしたくないための2つのJavaScriptファイル、Dojo.jsに1つ、および別のロード私のライブラリーにロードされたという理由だけで、ホスト・アプリケーションでDojoを使用することができます。
は、ホストからの私のカスタムライブラリの依存関係を分離することが可能ですので、彼らは同様のライブラリホストでもロードすることができると干渉しないEDIT:(も誤って直接の依存関係を使用してからホストを防ぐ - もしたとえば、両方のバージョンに存在するメソッドを呼び出すことで、私のライブラリにバンドルされているバージョンは、意図したバージョンの代わりに実行されます)。
すでに 'requirejs'を使用している場合は、探しているものを実行できるはずです。 'webpack'、' rollup'、 'browserify'のような他のオプションがあります。 –
@DJ。これは、ホストアプリケーションが使用する必要があるものですか? – erotavlas
あなたがロードした依存関係を使用できないようにすることで、あなたは何を達成できますか?あなたが依存関係自体に変更を加えていないとすれば、何がポイントですか?具体的には、どうしても実際には何も防止していないのであれば、ライブラリの二重読み込みを邪魔するのはなぜですか? – Roope