2016-07-23 50 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

请添加更多解释 –