我有兩個角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);
它不是打字稿進口的問題,多數民衆贊成的問題。其SystemJs如何加載文件和模塊。對於SystemJs能夠引用導入,其路徑必須加載到SystemJS因此需要映射。 –
只需確認:我們只需要額外的systemjs.config.js條目,因爲有問題的文件位於應用程序主入口點之上,對吧?例如../../?儘管systemjs仍然從服務器請求文件。我想知道這是怎麼回事。但是,只要你確認第一點,我會將其標記爲已回答,以便其他人可以將其用作參考。 – SynBiotik
是的。理想情況下,如果你可以有一個文件夾「應用程序」的整體映射,它應該正確加載文件。然而,因爲有2個應用程序會反對它。 –