您可以通過ES6
+ Angular2
+ Webpack
實現此目的。
在進入之前,讓我解釋什麼是umd
模塊系統。
的UMD圖案典型地試圖提供與天的 最流行的腳本裝載機兼容性(例如除其他RequireJS)
正如上面引述的,UMD
中存放庫與此形成的圖案模式將支持如requirejs
,,browserify
,systemjs
等的所有模塊/腳本加載器,即遵循UMD模式的庫將被所有主要模塊系統識別(AMD
,CommonJS
,ES6
和Vanilla JS
)。
這就是CDN中所有庫工作的方式。
現在,即使你必須遵循相同的UMD
模式。由於你的圖書館在angular2
,我建議你去ES6
,Angular2
和Webpack
。
您必須設置這些配置才能獲得UMD格式的庫,以便它可以被任何腳本加載器使用。
output: {
path: __dirname + '/lib', // path to output
filename: outputFile, // library file name
library: libraryName, // library name
libraryTarget: 'umd', // the umd format
umdNamedDefine: true // setting this to true will name the AMD module
},
一旦你的WebPack輸出束就緒(UMD模塊),則任何用戶都可以注入你的庫到索引頁面,即可開始使用angular2組件無論腳本裝載機/他們使用的模塊系統。
有一個很好的例子here和他解釋這here
問:我們圖書館的消費者如何將包括它們的角2應用此UMD捆綁?
答:由於您的圖書館將是一個UMD模塊,用戶可以包括基於他們正在使用他們的應用程序中的腳本加載器/模塊系統的圖書館。
例如。 香草JS:
<script src="http://example.com/your_lib.js"></script>
<script>
// Your_Lib will be available and will attach itself
// to the global scope.
var html = Your_Lib.render();
</script>
RequireJS(AMD):
<script src="http://example.com/require.js"></script>
<script> requirejs config goes here </script>
<script>
define(['your_lib', function(Your_Lib) {
var html = Your_Lib.render();
}])
</script>
SystemJS(CommonJS的):
var map = {
'@angular': 'node_modules/@angular',
....
'your_lib': 'example.com/your_lib.js'
};
var config = {
defaultJSExtensions: true,
map: map,
packages: packages
};
System.config(config);
然後你可以導入你的圖書館照常。
的WebPack:
index.html中
在webpack.config.js
{
externals: {
// require("your_lib") is external and available
// on the global var Your_Lib
"your_lib": "Your_Lib"
}
}
和你的庫將可在全球範圍內Your_Lib
。
我認爲你可以爲你的模塊創建polyfil js,就像在plunker例子中那樣我們包含角2 polyfil http://embed.plnkr.co/w2FVfKlWP72pzXIsfsCU/。這樣它將允許用戶導入js文件,用戶可以在index.html中導入並使用它的模塊。 –