Как избежать импорта с очень длинными относительными путями в Angular 2?
Как я могу ввести что-то вроде 'my-app-name/services'
чтобы избежать таких строк импорт?
import {XyService} from '../../../services/validation/xy.service';
2 ответа:
TypeScript 2.0+
в TypeScript 2.0 вы можете добавить
baseUrl
в собственностьtsconfig.json
:{ "compilerOptions": { "baseUrl": "." // etc... }, // etc... }
затем вы можете импортировать все, как если бы Вы были в директории:
import {XyService} from "services/validation/xy.service";
кроме того, вы можете добавить
paths
свойство, которое позволяет сопоставить шаблон, а затем отобразить его. Например:{ "compilerOptions": { "baseUrl": ".", "paths": { "services/*": [ "services/validation/*" ] } // etc... }, // etc... }
что позволит вам импортировать его из любого места, как это:
import {XyService} from "services/xy.service";
оттуда, вам нужно будет настройте любой загрузчик модулей, который вы используете для поддержки этих имен импорта. Прямо сейчас компилятор TypeScript, похоже, не отображает их автоматически.
вы можете прочитать больше об этом в выпуск github. Существует также
rootDirs
свойство, которое полезно при использовании нескольких проектов.Pre TypeScript 2.0 (по-прежнему применяется в TS 2.0+)
Я нашел, что это можно сделать проще с помощью "бочках".
- в каждой папке, создать .
- в этих файлах, повторно экспортировать каждый файл в папке.
пример
в вашем случае, сначала создайте файл с именем
my-app-name/services/validation/index.ts
. В этом файле есть код:export * from "./xy.service";
затем создайте файл с именем
my-app-name/services/index.ts
и этот код:export * from "./validation";
теперь вы можете использовать свой сервис так (
index
is подразумевается):import {XyService} from "../../../services";
и если у вас есть несколько файлов там становится еще проще:
import {XyService, MyOtherService, MyOtherSerivce2} from "../../../services";
того, чтобы сохранить эти дополнительные файлы немного больше работы авансом (работа может быть устранена с помощью ствол-хранитель), но я обнаружил, что это окупается в конце концов с меньшей работой. Это намного проще сделать основные изменения структуры каталогов, и это сокращает количество импорта вы должны делать.
осторожностью
при этом есть несколько вещей, которые вы должны смотреть и не могу:
- вы должны следить за круговым реэкспортом. Поэтому, если файлы в двух подпапках ссылаются друг на друга, вам нужно будет использовать полный путь.
- вы не должны возвращаться в папку из той же исходной папки (например. находясь в файле в папке проверки и делая
import {XyService} from "../validation";
). Я нашел это и первый пункт может привести к ошибкам импорта не определяясь.- наконец, вы не можете иметь два экспорта в папке с таким же именем. Обычно это не проблема.
лучше использовать ниже конфигурации в tsconfig.json
{ "compilerOptions": { "...": "reduced for brevity", "baseUrl": "src", "paths": { "@app/*": ["app/*"] } } }
для вашего случая, используйте смогите сделать
import {XyService} from '@app/services/validation/xy.service'
или любой уровень пути, который вы можете настроить.