systemjs.config.js在angular 2打包结构中做什么?

还有,var map,packages,var config在这里做什么我有点困惑,他们做任何configuration。我看到每个项目,我发现无处不在,他们把这个文件。 这个function是做什么的?

(function(global) { // map tells the System loader where to look for things var map = { 'app': 'app', // 'dist', 'rxjs': 'node_modules/rxjs', 'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api', '@angular': 'node_modules/@angular', 'primeng': 'node_modules/primeng' }; // packages tells the System loader how to load when no filename and/or no extension var packages = { 'app': { main: 'boot.js', defaultExtension: 'js' }, 'rxjs': { defaultExtension: 'js' }, 'angular2-in-memory-web-api': { defaultExtension: 'js' }, 'primeng': { defaultExtension: 'js' } }; var packageNames = [ '@angular/common', '@angular/compiler', // ]; // add package entries for angular packages in the form '@angular/common': { main: 'index.js', defaultExtension: 'js' } packageNames.forEach(function(pkgName) { packages[pkgName] = { main: 'index.js', defaultExtension: 'js' }; }); var config = { map: map, packages: packages } // filterSystemConfig - index.html's chance to modify config before we register it. if (global.filterSystemConfig) { global.filterSystemConfig(config); } System.config(config); })(this); 

它允许configurationSystemJS来加载使用TypeScript编译器编译的模块。 对于匿名模块(每个JS文件一个模块),它允许将模块的名称映射到实际包含模块JavaScript代码的JS文件。

这里是一个例子。 如果我尝试导入名为app/test的模块,SystemJS将执行:

  • 尝试find一个预先注册的模块(与System.register('app/test', ...
  • 如果不是的话,它会查看它的configuration来构build执行加载相应文件的请求:
    • 有一个appmap条目
    • 有一个与defaultExtension = js app packages入口
  • 请求将是http://localhost:3000/app/test.js 如果您有map: { app: dist } ,请求将是http://localhost:3000/dist/test.js