2016-11-07 105 views
1

我想學習angular2但是我堅持與SystemJS配置。請解釋這個SystemJs配置

<!DOCTYPE html> 
<html> 
<head> 
    <title>Reloyalty Administration Dashboard</title> 

    <!-- Viewport mobile tag for sensible mobile support --> 
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> 
    <link rel="icon" href="/favicon.ico"> 

    <!-- For Angular2 Routing --> 
    <base href="/"> 


    <!-- Common Scripts--> 
    <script src="/common/js/jquery-1.11.3.min.js"></script> 

    <!--SCRIPTS--> 
    <script src="/bootstrap/js/bootstrap.min.js"></script> 
    <script src="/dashboard/js/bootstrap-switch.js"></script> 
    <script src="/dashboard/js/calendar-conf-events.js"></script> 
    <script src="/dashboard/js/chartjs-conf.js"></script> 
    <script src="/dashboard/js/common-scripts.js"></script> 
    <script src="/dashboard/js/easy-pie-chart.js"></script> 
    <script src="/dashboard/js/form-component.js"></script> 
    <script src="/dashboard/js/gritter-conf.js"></script> 
    <script src="/dashboard/js/jquery-ui-1.9.2.custom.min.js"></script> 
    <script src="/dashboard/js/jquery.backstretch.min.js"></script> 
    <script src="/dashboard/js/jquery.dcjqaccordion.2.7.js"></script> 
    <script src="/dashboard/js/jquery.nicescroll.js"></script> 
    <script src="/dashboard/js/jquery.scrollTo.min.js"></script> 
    <script src="/dashboard/js/jquery.sparkline.js"></script> 
    <script src="/dashboard/js/jquery.tagsinput.js"></script> 
    <script src="/dashboard/js/jquery.ui.touch-punch.min.js"></script> 
    <script src="/dashboard/js/sparkline-chart.js"></script> 
    <script src="/dashboard/js/tasks.js"></script> 
    <script src="/dashboard/js/zabuto_calendar.js"></script> 
    <script src="/dashboard/js/bootstrap-inputmask/bootstrap-inputmask.min.js"></script> 
    <script src="/dashboard/js/chart-master/Chart.js"></script> 
    <script src="/dashboard/js/fancybox/jquery.fancybox.js"></script> 
    <script src="/dashboard/js/fullcalendar/fullcalendar.min.js"></script> 
    <script src="/dashboard/js/gritter/js/jquery.gritter.js"></script> 
    <script src="/dashboard/js/jquery-easy-pie-chart/jquery.easy-pie-chart.js"></script> 
    <script src="/js/node_modules/es6-shim/es6-shim.min.js"></script> 
    <script src="/js/node_modules/reflect-metadata/Reflect.js"></script> 
    <script src="/js/node_modules/systemjs/dist/system-polyfills.js"></script> 
    <script src="/js/node_modules/systemjs/dist/system.src.js"></script> 
    <script src="/js/node_modules/zone.js/dist/zone.js"></script> 
    <script src="/js/node_modules/rxjs/bundles/Rx.js"></script> 
    <!--SCRIPTS END--> 

    <script> 


     System.config({ 
      packages: { 
       app: { 
        format: 'register', 
        defaultExtension: 'js', 
        main: 'main.js' 
       }, 
       '@angular/core': { 
        main: 'bundles/core.umd.js', 
        defaultExtension: 'js' 
       }, 
       '@angular/compiler': { 
        main: 'bundles/compiler.umd.js', 
        defaultExtension: 'js' 
       }, 
       '@angular/common': { 
        main: 'bundles/common.umd.js', 
        defaultExtension: 'js' 
       }, 
       '@angular/platform-browser-dynamic': { 
        main: 'bundles/platform-browser-dynamic.umd.js', 
        defaultExtension: 'js' 
       }, 
       '@angular/platform-browser': { 
        main: 'bundles/platform-browser.umd.js', 
        defaultExtension: 'js' 
       }, 
       rxjs: { 
        main: 'bundles/Rx.umd.min.js', 
        defaultExtension: 'js' 
       } 
      }, 
      map: { 
       'app': '.', // where my app is. '.' means relative 
       '@angular': '/js/node_modules/@angular', 
       'rxjs': '/js/node_modules/rxjs' 
      } 
     }); 
     System.import('management/main') 
       .then(null, console.error.bind(console)); 
    </script> 

    <!-- end AngularJS 2--> 
</head> 

<body> 

<my-app>Loading...</my-app> 

</body> 
</html> 

我的文件結構是:

management/ 
├── app/ 
│ ├── app.component.ts 
| ├── root.module.ts 
├──main.ts 

main.ts:

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 
import {RootModule} from "./app/root.module"; 

platformBrowserDynamic().bootstrapModule(RootModule); 

root.module.ts:

import { NgModule }  from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { AppComponent } from './app.component'; 


@NgModule({ 
    imports:  [BrowserModule], // what my Angular Application needs 
    declarations: [AppComponent], // the view classes that belong to this module. 
    bootstrap: [AppComponent], // which class to boostrap 
}) 
export class RootModule {} 

app.component.ts:

import {Component} from '@angular/core'; 
@Component({ 
    selector: 'my-app', 
    template: '<h1>BLAAH is best !!! OMGOMGOMG blagh assdsdasd</h1>' 
}) 
export class AppComponent { } 

我已經閱讀了所有文檔systemjs提供,但似乎無法理解配置中發生了什麼。

例如,如果我寫:

System.import('main') 
       .then(null, console.error.bind(console)); 

我在控制檯中的錯誤?

GET http://merchant.localhost:1337/main.js 404 (Not Found) 
Error: (SystemJS) XHR error (404 Not Found) loading http://merchant.localhost:1337/main.js(…) 

=========================================== ==============================

---------------- --------------------編輯1 ---------------------------- ---

=========================================== ==============================

我改變:

System.config({ 
     packages: { 
      app: { 
       format: 'register', 
       defaultExtension: 'js', 
       main: 'main.js' 
      }, 
      '@angular/core': { 
       main: 'bundles/core.umd.js', 
       defaultExtension: 'js' 
      }, 
      '@angular/compiler': { 
       main: 'bundles/compiler.umd.js', 
       defaultExtension: 'js' 
      }, 
      '@angular/common': { 
       main: 'bundles/common.umd.js', 
       defaultExtension: 'js' 
      }, 
      '@angular/platform-browser-dynamic': { 
       main: 'bundles/platform-browser-dynamic.umd.js', 
       defaultExtension: 'js' 
      }, 
      '@angular/platform-browser': { 
       main: 'bundles/platform-browser.umd.js', 
       defaultExtension: 'js' 
      }, 
      rxjs: { 
       main: 'bundles/Rx.umd.min.js', 
       defaultExtension: 'js' 
      } 
     }, 
     map: { 
      'app': 'management', // where my app is. '.' means relative 
      '@angular': '/js/node_modules/@angular', 
      'rxjs': '/js/node_modules/rxjs' 
     } 
    }); 
    System.import('app') 
      .then(null, console.error.bind(console)); 

因此,現在我的應用程序位於管理文件夾中,並以「應用程序」啓動它,該應用程序知道它必須運行main.js等。這工作。大。所以我繼續創建了一個root.component.html,它現在不會被加載。 下面是代碼:

root.component.ts:

import {Component} from '@angular/core'; 
@Component({ 
    selector: 'root-component', 
    templateUrl: 'root.component.html' 
}) 
export class RootComponent { } 

和錯誤:

GET http://merchant.localhost:1337/root.component.html 404 (Not Found) 

回答

0

看來你真的需要映射appmanagement文件夾而不是. 。你已經重新命名了你的根,這就是爲什麼你有這些麻煩似乎。

您還需要修復main: './main.js'的包裝,並使用app作爲模塊名稱。

所以會發生的是,你告訴System.Js有一個名爲app的包,你可以在./management/main.js下找到它。

P.S.我不是System.Js的超級大專家,所以我可能是錯的,但我設法使用Angular2教程運行它:)

+0

重命名應用程序:'。'to app:'management'然後System.import('main')給我「GET http://merchant.localhost:1337/main 404(Not Found)」 – mp3por

+1

你應該導入'app'而不是'main' 。 System.js不知道'main'是什麼。 –

+0

我認爲你還需要修復這個包爲'main:'./main.js'' –