2016-07-23 88 views
5

我有兩個角2級的應用在下面的結構中的應用程序的文件夾以外住在角2應用在打字稿:導入共享服務,使用systemjs

/應用
         /APP1
         /APP2
          /共享

在我的angular 2組件(使用打字稿)中,我導入了幾個模塊(位於同一文件夾中),沒有任何問題: 從'./test1.service'導入{TestService1};

但是,當我試圖從共享文件夾中導入某些東西時,無法在運行時(瀏覽器)加載所需的模塊。 從'../shared/test2.service'導入{TestService2}; 瀏覽器說:http://something.something.darkside/app/test2.service 404(未找到)。

我可以使用defaultJSExtensions設置爲true,這將解決問題。但我想知道如何正確配置systemjs來處理這種情況。

systemjs.config.js

(function (global) { 

    var ngPackageNames = [ bla, ng2packages... ]; 

    //ng2 apps 
    var ngApps = [ 
     '/app/app1', 
     '/app/app2' 
    ]; 

    var map = { 
     '@angular': '/node_modules/@angular', 
     'rxjs': '/node_modules/rxjs' 
    }; 

    var packages = { 
     'rxjs': { defaultExtension: 'js' } 
    }; 

    //adds package entries for each of the needed ng2 packages 
    ngPackageNames.forEach(function (pkgName) { 
     packages['@angular/' + pkgName] = System.packageWithIndex 
      ? { main: 'index.js', defaultExtension: 'js' } 
      : { main: '/bundles/' + pkgName + '.umd.js', defaultExtension: 'js' }; 
    }); 

    //adds map entries and package entries for the apps 
    ngApps.forEach(function (app) { 
     var appName = app.substring(app.lastIndexOf('/') + 1); 
     map[appName] = app; 
     packages[appName] = { main: appName + '.main.js', defaultExtension: 'js' }; 
    }); 

    System.config({ map: map, packages: packages }); 

})(this); 

回答

4

包含的文件夾路徑,以地圖的對象。

var map = { 
    'shared' : 'app/shared', 
    '@angular': '/node_modules/@angular', 
    'rxjs': '/node_modules/rxjs' 
}; 

添加在包中添加

var packages = { 
    'rxjs': { defaultExtension: 'js' }, 
    'shared': { defaultExtension: 'js' } 
}; 
+0

它不是打字稿進口的問題,多數民衆贊成的問題。其SystemJs如何加載文件和模塊。對於SystemJs能夠引用導入,其路徑必須加載到SystemJS因此需要映射。 –

+0

只需確認:我們只需要額外的systemjs.config.js條目,因爲有問題的文件位於應用程序主入口點之上,對吧?例如../../?儘管systemjs仍然從服務器請求文件。我想知道這是怎麼回事。但是,只要你確認第一點,我會將其標記爲已回答,以便其他人可以將其用作參考。 – SynBiotik

+0

是的。理想情況下,如果你可以有一個文件夾「應用程序」的整體映射,它應該正確加載文件。然而,因爲有2個應用程序會反對它。 –

-1
**User "defaultJSExtensions": true in system.config.js** 


    (function (global) { 
     System.config({ 
     paths: { 
      'npm:': 'node_modules/' 
      }, 
     "defaultJSExtensions": true, 
     map: { 
+3

請添加更多解釋 –