ES6
您可以使用++实现此Angular2
目的Webpack
。
在进入之前,让我解释一下什么是umd
模块系统。
UMD 模式通常尝试提供与当时最流行的脚本加载器的兼容性(例如 RequireJS 等)
如上所述,UMD
是一种模式,使用此模式创建的库将支持所有模块/脚本加载器,如、 、requirejs
等webpack
。即遵循 UMD 模式的库将被所有主要模块系统(、和)识别.browserify
systemjs
AMD
CommonJS
ES6
Vanilla JS
这是 CDN 中所有库的工作方式。
现在,即使您也必须遵循相同的 ieUMD
模式。既然你的图书馆是开着的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 组件,而不管他们使用的脚本加载器/模块系统如何。
这里有一个很好的例子,他在这里解释了这一点
问:我们库的使用者如何在他们的 Angular 2 应用程序中包含这个 umd 包?
Ans:由于您的库将成为 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>
要求JS(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);
然后你可以像往常一样导入你的库。
网页包:
在 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
在全局范围内可用。