我的问题中不止一种方法会起作用。有些不会,有些目前由于 Angular 2 的缺陷而不会。这是我目前使用的方法:
WebPack + require.js
angular2-webpack-config.js
var config = {
entry: {
app: inputFile
},
externals: [
/^@angular\//,
/^rxjs\//
],
output: {
libraryTarget: "amd",
path: __dirname,
filename: './' + outputName
},
plugins: [
new require('webpack').optimize.UglifyJsPlugin()
]
};
我只告诉它是什么externals
以及什么伪标准机制将在运行时通过加载它们libraryTarget
(AMD/RequireJS、CommonJs/节点、UMD)。我的设置只是导致外部库引用被包装在define()
.
请注意,我没有对 WebPack 中的路径执行任何操作。在我的软件中,任何内容node_modules
文件夹在我的软件和第三方模块内部都有类似的参考机制。我的代码和第三方库都希望在以下位置找到 RxJSrxjs
(例如,而不是../rxjs
或“node_modules/rxjs”)。在运行时,两者都需要映射,但由于我们不允许 WebPack 访问第三方模块(我们使用预构建的 UMD),因此 WebPack 不是进行映射的地方。它只会映射我的代码。相反,我们应该在运行时加载器中执行此操作:
索引.htm
<script src="https://npmcdn.com/core-js/client/shim.min.js"></script>
<script src="https://npmcdn.com/[email protected] /cdn-cgi/l/email-protection/dist/zone.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/reflect-metadata/0.1.3/Reflect.min.js"></script>
<script>
var require = (function(){
var versions = {
'router-deprecated': '@@2.0.0-rc.2',
'forms': '@@0.1.1',
'angular': '@@2.0.0-rc.4',
'rxjs': '@@5.0.0-beta.10'
}
var paths = {
'rxjs': "https://npmcdn.com/rxjs" + versions.rxjs + "/bundles/Rx.umd.min"
};
[
'core',
'http',
'common',
'compiler',
'platform-browser',
'router-deprecated',
'platform-browser-dynamic'
].forEach(function (submodule) {
var module = '@@angular/' + submodule
paths[module] = 'https://npmcdn.com/' + module + (versions[submodule] || versions.angular) + '/bundles/' + submodule + '.umd.min';
});
var rxmap = {};
[
'Rx',
'Observable',
'Subject',
'observable/PromiseObservable',
'operator/toPromise'
].forEach(function (submodule) {
rxmap['rxjs/' + submodule] = 'rxjs';
})
return {
paths: paths,
map: {
'*': rxmap
}
};
})();
</script>
<script data-main="../assets/compiled/a2.webpack.js" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.2.0/require.min.js"></script>
另外,如果您使用 WebPack 和 UMD,您可能会关心生成的文件大小和时间。这个子应用程序的 Angular 2 构建过程从大约 24 秒缩短到 1 秒。它的发布大小从超过 2MB 增加到大约 100k。
以下是缓存依赖项的线路负载大小以供参考。奇怪的是它们目前只有几KBsmaller在 UMD 版本中,比线尺寸增加了集成的、WebPack 修剪过的捆绑包。
KB
27.5 shim
6.8 zone
8.0 require
3.3 platform-browser-dynamic
36.8 http
8.7 core
20.8 common
16.5 router
98.5 compiler
27.9 platform-browser
39.0 Rx
显然,更新后我的公共站点加载时间大大减少(从大约 10-20 秒减少到 1 秒),但这些数字根据连接情况变化很大。