我尝试在Chrome扩展程序中使用angular2,并且它没有意识到我已经加载了angular2捆绑包。这是文件/www/popup.html
中的脚本标记:
<script src="lib/js/jquery.min.js"></script>
<script src="lib/js/es6-shim.min.js"></script>
<script src="lib/js/system-polyfills.js"></script>
<script src="lib/js/angular2-polyfills.js"></script>
<script src="lib/js/system.src.js"></script>
<!-- bundles should be used -->
<script src="lib/js/Rx.js"></script>
<script src="lib/js/angular2.dev.js"></script>
<script src="lib/js/router.dev.js"></script>
<script src="app/pages/popup-page.js"></script>
在/www/app/pages/popup-page.js
中,如果我设置angular2和rxjs源的路径,它将起作用:
System.config({
defaultJSExtensions: true, // Will prepend .js to the module names
paths: {
'angular2/*': '/node_modules/angular2/*', // finds
'rxjs/*': '/node_modules/rxjs/*', // finds
'*': '/www/app/*'
},
packages: {
"app": {
format: 'register',
defaultExtension: 'js',
}
}
});
但我不想让它单独加载每个javascript文件,甚至将它们包含在我的扩展程序中。看起来这些bundle应该在脚本加载时自行注册。
如果我没有包含路径&#39; *&#39;到我的代码所在的地方,我得到了一个&#39;要求没有定义&#39;试图运行脚本。
如果我没有包含angular2和rxjs的路径,我会让浏览器尝试加载&#39; / www / app / angular2 /... 39;对于每次导入而不是使用捆绑
答案 0 :(得分:2)
如果您通过<script>
标记加载包含已注册为系统模块的模块的软件包,则System.config
中不需要任何其他内容 - 它将通过内存中的注册名称解析导入。
通过在您的html文件中加入<script src="lib/js/angular2.dev.js"></script>
,import {Component} from 'angular2/core'
之类的导入语句可以在没有任何其他配置的情况下运行。
从path
删除System.config
个选项可解决角度导入问题。 ('*': '/www/app/*'
- 此行基本上将所有内容映射到/www/app
文件夹...)。
要设置自己脚本的路径,请使用map
,more info here中的System.config.package["app"]
选项。
答案 1 :(得分:1)
我认为问题是defaultJSExtensions
。如果我只是将我的System.config
更改为此,则可以:
System.config({
packages: {
"app": {
defaultExtension: 'js',
}
}
});
我只是不知道有关所有这些选项的文档的任何地方。我查看了这些页面(以及更多我没有保存链接的内容),但未能找到所有选项的参考或良好解释:
答案 2 :(得分:0)
你只需要映射&#34; app&#34;而不是&#34; *&#34;,如下所述:
same name conflicting signature