Я изо всех сил пытаюсь понять, как операторы импорта разрешают пути, и не могу определить, почему это не удается. У меня есть компонент Angular, который импортирует класс в другую папку. Это выглядит так:
Мой компонент ссылается на этот общий класс следующим образом:
import { Component } from '@angular/core';
import { State } from '../common/models/state';
@Component({
selector: 'apartment'
})
export class ApartmentComponent {
states: State[];
}
Я могу загрузить свой модуль, компонент и связанные классы. Однако этот общий класс просто не загружается. Я получаю эту ошибку в консоли Chrome dev:
Apartments:260 Error: Error: XHR error (404 Not Found) loading http://localhost/DemoApp/scripts/components/common/models/state
at XMLHttpRequest.wrapFn [as _onreadystatechange] (http://localhost/DemoApp/node_modules/zone.js/dist/zone.js:647:29)
at ZoneDelegate.invokeTask (http://localhost/DemoApp/node_modules/zone.js/dist/zone.js:236:37)
at Zone.runTask (http://localhost/DemoApp/node_modules/zone.js/dist/zone.js:136:47)
at XMLHttpRequest.ZoneTask.invoke (http://localhost/DemoApp/node_modules/zone.js/dist/zone.js:304:33)
Error loading http://localhost/DemoApp/scripts/components/common/models/state as "../common/models/state" from http://localhost/DemoApp/scripts/components/apartment/apartment.component.js
Возможна ли загрузка из внешнего каталога по относительному пути? Я поэкспериментировал с systemjs.config.js, чтобы дойти до этого момента, но мне кажется, что я должен что-то упустить, потому что этот импорт не работает. не работает.
Обратите внимание, что у меня есть tsconfig.json с такими настройками:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
"noEmitOnError": false
},
"exclude": [
"node_modules",
"node_modules_dep",
"wwwroot"
],
"compileOnSave": true
}
и system.config.js добавляет дополнительные пакеты следующими способами:
/**
* System configuration for Angular 2 samples
* Adjust as necessary for your application needs.
*/
(function(global, window) {
// map tells the System loader where to look for things
var map = {
'rxjs': 'npm:rxjs/'
};
// packages tells the System loader how to load when no filename and/or no extension
var packages = {
'app': { main: 'main.js', defaultExtension: 'js' },
'rxjs': { defaultExtension: 'js' },
'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' }
};
var ngPackageNames = [
'common',
'compiler',
'core',
'http',
'platform-browser',
'platform-browser-dynamic',
'router',
'forms'
];
// Individual files (~300 requests):
function packIndex(pkgName) {
packages['@angular/' + pkgName] = {
main: 'index.js',
defaultExtension: 'js'
};
}
// Bundled (~40 requests):
function packUmd(pkgName) {
packages['@angular/' + pkgName] = {
main: 'bundles/' + pkgName + '.umd.js',
defaultExtension: 'js'
};
map['@angular/' + pkgName] = 'npm:@angular/' + pkgName + '/';
}
// Most environments should use UMD; some (Karma) need the individual index files
var setPackageConfig = System.packageWithIndex ? packIndex : packUmd;
// Add package entries for angular packages
ngPackageNames.forEach(setPackageConfig);
//Adding Additional Packages
$.each(commonPackageNames, function (index, pkgName) {
console.log("Loading (" + pkgName.name + ") from '" + pkgName.path + "'");
var sName = pkgName.name;
packages[sName] = {
main: pkgName.main,
defaultExtension: pkgName.defaultExtension
}
map[sName] = pkgName.path;
});
var config = {
paths: {
// paths serve as alias
'npm:': window.baseURL + '/node_modules/'
},
map: map,
packages: packages
};
System.config(config);
})(this, window);
Мы разделяем модули на страницу, поэтому они настраиваются через apartment.config.js, который выглядит так:
(map = map || {}).app = 'apartmentmodule';
commonPackageNames.push({
name: 'apartmentmodule',
main: 'main.js',
defaultExtension: 'js',
path: window.baseURL + 'scripts/components/apartmentmodule'
});
<base href=></base>
установлен правильно, поскольку он определяет начальную точку для ваших путей. - person silentsod   schedule 21.10.2016