在Angular2 / SystemJS中,systemjs.config.js和.import()中的关系是什么?

时间:2017-03-25 16:03:52

标签: angular systemjs

我想进入Angular2。我已经阅读了一些关于systemjs.config.js正在做什么的Stack Exchange帖子和一些互联网文章。但是,我发现所有这些解释都使用了" app"太多次了。

当index.html说:

<script>
 System.import('app').catch(function(err){ console.error(err); });
</script>

..什么是应用程序&#39;争论?我的示例配置文件有3个对象,其中2个有&#34; app&#34;键,其中一个甚至有一个&#34; app&#34; &#34; app&#34;的价值键。此外,还有一个应用程序&#34;文件夹,我确定这不是巧合。最重要的是,有很多文件以&#34; app&#34;开头。 (app.module.ts等),但所有这些都存在于app文件夹中,因此我不知道它们是否重要。

我尝试过更改为.import(&#39; app2&#39;),但我唯一可以理解的不会导致中断的是将地图键更改为app2(地图:{app2:& #34; app&#34;})。但对于我的生活,我无法弄清楚如何改变其他事物。我尝试过更改文件夹名称,键和值。因此,例如,以下内容不起作用(即使我将app文件夹更改为app2或app3):

map: {
    app2: "app3"
}
packages: {
    app3: { ... }
}

有人可以用简单的英语解释这些事情的顺序以及它们之间的关系吗?

PS:这篇文章Can anyone explain systemjs.config.js in angular2?非常有助于解释&#34; map&#34;的其他内容。对象正在做,并且&#34;路径&#34;对象也是如此,但它没有解释我要问的部分。

1 个答案:

答案 0 :(得分:0)

完成编辑: 好。经过多次实验和研究,我发现了这个:

有三件事情需要匹配:System.import的参数,systemjs.config的 map 对象中的键名,以及systemjs.config中的键名< strong>包对象。只要它们都匹配,您就可以为它们命名。

map的键值必须指向一个文件夹,而package的键值“main”键必须指向该文件夹中的文件。

我将进一步探讨以下内容:

  1. system.config的map键必须指向RELATIVE文件夹,但相对于“index.html”(调用system.config.js),还是相对于systemjs.config.js?
  2. - 答案:相对于index.html

    1. 在systemjs.config.js中,有几个地图:“app”,“rxjs”和一堆@angular。但是,只有“app”和“rxjs”具有匹配的包。为什么“@ angular / *”地图不需要自己的包?
    2. - ?

      1. 实际上,packages.app.main是否需要指向map.main标识的文件夹中的文件?看起来这条路也可以是相对的......
      2. - 答案:是的,这条路可以是相对的,甚至可以“向上”(“../”)。

        1. 如果你使用tsconfig.outDir(这通常与map.app属性相当不错),并且你有一个TS文件“在”outDir“之上”(例如,在项目根目录中),那么outDir将“转移”它的输出。
        2. - 答案:所以,如果你的ts文件在“app”文件夹中,并且你使用outDir到“dist”文件夹,并且你的root中有一个“test.ts”文件,那么就不能使用{outDir :dist}。相反,你必须使用{outDir:dist / app}。