angular 7 cli генерирует каждую службу, канал и т. д. в своем собственном каталоге

В ранних версиях Angular Cli при запуске ng g service services/MyService он создавал:

services/my-service/my-service.service.ts
services/my-service/my-service.service.spec.ts

Но теперь он создает

services/my-service.service.ts
services/my-service.service.spec.ts

Есть ли способ вернуться к другому поведению без подробного описания ng g service services/my-service/MyService ?Я не нашел ничего связанного, но, возможно, я использую неправильные ключевые слова.


person distante    schedule 31.01.2019    source источник


Ответы (2)


Хотя вы можете передавать --flat=false каждый раз при выполнении ng generate, чтобы каталог создавался на основе имени службы/канала/директивы, вы можете фактически переопределить параметры схемы по умолчанию, такие как flat, на уровне проекта в angular.json, чтобы избежать необходимости передавать параметр --flat=false каждый раз в командной строке. Например, чтобы установить flat в false при выполнении ng g service services/MyService, вы должны добавить дополнительное свойство @schematics/angular:service в свойство schematics соответствующего проекта в angular.json:

...
"projects": {
    "sample-angular": {
      "root": "",
      "sourceRoot": "src",
      "projectType": "application",
      "prefix": "app",
      "schematics": {
        "@schematics/angular:service": {
          "flat": false
        }
     },
     ...
}

После добавления этого переопределения запуск команды ng g service services/MyService приводит к следующему выводу:

CREATE src/app/services/my-service/my-service.service.spec.ts (349 bytes)
CREATE src/app/services/my-service/my-service.service.ts (138 bytes)

Вы можете переопределить любые конкретные схемы, которые вам нужны, будь то каналы, сервисы, компоненты, модули или директивы. Вы можете увидеть параметры схемы по умолчанию в /node_modules/@angular/cli/lib/config/schema.json. Существует ряд параметров, и вы можете точно настроить то, что вы хотите сгенерировать, и как избежать необходимости запоминать и передавать параметры в командную строку.

Если у вас несколько проектов, вы можете создать свойство schematics на том же уровне, что и projects, чтобы переопределить параметры схемы для всех проектов.

Надеюсь, это поможет!

person Alexander Staroselsky    schedule 31.01.2019
comment
Отличный ответ - хотя значения по умолчанию Angular существуют по какой-то причине, если вы хотите следовать своему собственному соглашению в данном приложении, это способ сделать это. - person Nathan Beck; 31.01.2019
comment
@NathanBeck, когда у меня более 5 сервисов, я вижу, что это немного загромождает. Потому что у меня 10 файлов вместо 5 :( - person distante; 31.01.2019
comment
@ alexander-staroselsky alexander-staroselsky, есть ли способ применить одно и то же свойство (flat) ко всем схемам без необходимости писать его для каждого ключа? (компонент, труба, сервис и т. д. и т. д.) - person distante; 01.02.2019
comment
@distante Я так не думаю, но могу ошибаться. Проблема в том, что не все схемы имеют параметр flat, включая Guard, Enum и Interface, и это лишь некоторые из них. Возможно, вы захотите опубликовать новый вопрос здесь или в проблемах проекта @angular/cli, так как может быть какой-то шаблон глобуса, который каким-то образом может нацеливаться на все схемы. - person Alexander Staroselsky; 01.02.2019

Флаг flat по умолчанию имеет значение true при создании службы.

Я предлагаю одно из следующих (не тестировалось на Angular CLI 7, но оба работают с Angular CLI 6)

ng g service services/my-service --no-flat
ng g service services/my-service --flat=false
person Nathan Beck    schedule 31.01.2019