Angular2,将组件连接成一个bundle,SystemJS失败

时间:2016-04-28 21:57:24

标签: typescript angular systemjs

我有一个gulp任务,重点是将多个Angular2组件捆绑在一起,并且失败并显示以下错误消息:

Error: Multiple anonymous System.register calls in module http://site/bundles/Pages/file.min.js. If loading a bundle, ensure all the System.register calls are named.

确实如此,System.register调用未命名,但这是TypeScript编译器生成的内容。我无法在网上找到任何资源来解释如何改变这种行为,所以我认为这是不可能的?

这就是我尝试导入file.min.js的方式:

<script type="text/javascript">System.import('bundles/Pages/file.min.js').then(null, console.error.bind(console));</script>

这就是file.min.js中的内容:

(function(System, SystemJS) {System.register([],function(e,t){"use strict";t&&t.id;return{setters:[],execute:function(){}}});
...
System.register([],function(e,t){"use strict";t&&t.id;return{setters:[],execute:function(){}}});
System.register([],function(e,t){"use strict";t&&t.id;return{setters:[],execute:function(){}}});
System.register([],function(e,t){"use strict";t&&t.id;return{setters:[],execute:function(){}}});
System.register([],function(t,e){"use strict";var n;e&&e.id;return{setters:[],execute:function(){n=function(){function t(){}return t}(),t("MyService",n)}}});
...
})(System, System);

关于如何使用SystemJS

进行捆绑,我可能会完全离开

1 个答案:

答案 0 :(得分:1)

这是由匿名System.register电话引起的。如果您打算捆绑,则应该命名所有呼叫:

System.register([],...); //no bundle, should be downloaded as file
System.register('myModule', [], ...); //this is how it should be for bundling

显然,如果尚未指定编译器选项--outFile,TypeScript将生成匿名注册。另一种方法是在/// <amd-module name="my module name" />文件的顶部添加.ts,以解决捆绑问题。此外,如果你正在使用路由器,你可能需要防止标识符损坏,因为它给我带来了很多问题,显然会破坏角度router.js