使SystemJS使用angular2捆绑?

时间:2016-03-04 21:42:54

标签: angular systemjs

我尝试在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应该在脚本加载时自行注册。

  1. 如果我没有包含路径&#39; *&#39;到我的代码所在的地方,我得到了一个&#39;要求没有定义&#39;试图运行脚本。

  2. 如果我没有包含angular2和rxjs的路径,我会让浏览器尝试加载&#39; / www / app / angular2 /...&# 39;对于每次导入而不是使用捆绑

3 个答案:

答案 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文件夹...)。

要设置自己脚本的路径,请使用mapmore info here中的System.config.package["app"]选项。

答案 1 :(得分:1)

我认为问题是defaultJSExtensions。如果我只是将我的System.config更改为此,则可以:

System.config({
  packages: {
    "app": {
      defaultExtension: 'js',
    }
  }
});

我只是不知道有关所有这些选项的文档的任何地方。我查看了这些页面(以及更多我没有保存链接的内容),但未能找到所有选项的参考或良好解释:

  • systemjs site
    • 指向{{3>} 无用
    • 的链接
    • 链接到paths implementation,其中包含第15.2节,这是ES2015模块的一个很好的参考,但不是systemjs config

答案 2 :(得分:0)

你只需要映射&#34; app&#34;而不是&#34; *&#34;,如下所述:

same name conflicting signature