Как я могу ввести что-то вроде 'my-app-name/services'
, чтобы избежать таких строк, как следующий импорт?
import {XyService} from '../../../services/validation/xy.service';
Как я могу ввести что-то вроде 'my-app-name/services'
, чтобы избежать таких строк, как следующий импорт?
import {XyService} from '../../../services/validation/xy.service';
В машинописном 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
которое полезно при использовании нескольких проектов.
Я обнаружил, что это можно сделать проще, используя "бочки".
index.ts
.пример
В вашем случае сначала создайте файл с именем my-app-name/services/validation/index.ts
. В этом файле есть код:
export * from "./xy.service";
Затем создайте файл с именем my-app-name/services/index.ts
и получите этот код:
export * from "./validation";
Теперь вы можете использовать свой сервис следующим образом (подразумевается index
):
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/*"]
}
}
}
В вашем случае use может выполнить import {XyService} from '@app/services/validation/xy.service'
или с любого уровня пути, который вы можете настроить.
Я только сталкивался с этим вопросом. Я знаю это уже сейчас, но для любого, кто сталкивается с этим, есть более простой ответ.
Я столкнулся только с тем, что что-то, что я делал в течение долгого времени, перестало работать, и мне было интересно, изменилось ли что-то в Angular 7. Нет, это был только мой собственный код.
В любом случае мне нужно было всего лишь изменить одну строку в tsconfig.json
чтобы избежать длинных путей импорта.
{
"compilerOptions": {
"...": "simplified for brevity",
"baseUrl": "src"
}
}
Это сработало для меня с тех пор, как появился Angular-CLI.