Як я можу ввести щось на зразок того, 'my-app-name/services'
щоб уникнути таких рядків, як наступний імпорт?
import {XyService} from '../../../services/validation/xy.service';
Як я можу ввести щось на зразок того, 'my-app-name/services'
щоб уникнути таких рядків, як наступний імпорт?
import {XyService} from '../../../services/validation/xy.service';
Відповіді:
У 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
властивість, яка корисна при використанні декількох проектів.
Я виявив, що це можна зробити простіше, використовуючи "бочки" .
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";
). Я виявив це, і перший пункт може призвести до того, що помилки імпорту не визначаються.baseUrl
це відносно розташування 'tsconfig.json'. Отже, у нашому випадку (кутовий додаток) значення мало бути "baseUrl": "./app",
, де "додаток" є коренем програми.
Краще використовувати нижче конфігурацію в tsconfig.json
{
"compilerOptions": {
"...": "reduced for brevity",
"baseUrl": "src",
"paths": {
"@app/*": ["app/*"]
}
}
}
Традиційний спосіб перед кутовим 6:
`import {XyService} from '../../../services/validation/xy.service';`
повинні бути перероблені на такі:
import {XyService} from '@app/services/validation/xy.service
Короткий і солодкий!
Я щойно натрапив на це запитання. Я знаю, що це вже давно, але для тих, хто стикається з ним, існує простіша відповідь.
Я зіткнувся лише з тим, що щось, чим я займався довгий час, перестало працювати, і мені було цікаво, чи щось не змінилося в Angular 7. Ні, це був лише мій власний код.
Незважаючи на це, мені довелося змінити лише один рядок, tsconfig.json
щоб уникнути довгих шляхів імпорту.
{
"compilerOptions": {
"...": "simplified for brevity",
"baseUrl": "src"
}
}
Приклад:
// before:
import {XyService} from '../../../services/validation/xy.service';
// after:
import { XyService } from 'app/services/validation/xy.service';
Це працює в мене майже з тих пір, як з'явився Angular-CLI.