Угловая схема относительного пути - PullRequest
1 голос
/ 16 апреля 2019

Я хотел бы создать собственную схему для Angular, которая создаст файл в том же каталоге, из которого была выполнена схема. Я следил за этой статьей, но я не уверен, как получить новый файл для добавления в нужную директорию. (https://developer.okta.com/blog/2019/02/13/angular-schematics#create-your-first-schematic)

Например, если у меня следующая структура каталогов:

src/app/ !-- Angular Root
|- modules
   |_ foo
      |- foo.component.ts
      |_ foo.component.html
|- app.component.ts
|- app.component.html
|_ app.module.ts

Если бы я был, выполните следующие команды:

> cd /src/app/modules/foo
> ng g my-component:my-component

Я бы хотел, чтобы вновь созданные / обновленные файлы находились в каталоге / src / app / modules / foo, а не в корневом каталоге. Подумайте, как работает NG Generate. Если я выполню ng g component bar из каталога / src / app / modules / foo, то в этом каталоге будет создан новый компонент. Это поведение, которое мне нужно повторить.

Вот мой завод. Сейчас он явно нацелен на корневой каталог с помощью project.root, но я не нашел альтернативы, и если я не укажу путь, я получу ошибку. Как получить текущий путь (src / app / modules / foo) для хранения в options.path?

export function setupOptions(host: Tree, options: any): Tree {
  const workspace = getWorkspace(host);
  if (!options.project) {
    options.project = Object.keys(workspace.projects)[0];
  }
  const project = workspace.projects[options.project];
  options.path = join(normalize(project.root), 'src');
  return host;
}

// You don't have to export the function as default. You can also have more than one rule factory
// per file.
export function myComponent(_options: any): Rule {
  return (tree: Tree, _context: SchematicContext) => {
    setupOptions(tree, _options);
    const movePath = normalize(_options.path + '/');
    const templateSource = apply(url('./files/src'), [
      template({ ..._options }),
      move(movePath),
      forEach((fileEntry: FileEntry) => {
        if (tree.exists(fileEntry.path)) {
          tree.overwrite(fileEntry.path, fileEntry.content);
        }
        return fileEntry;
      })
    ]);
    const rule = mergeWith(templateSource, MergeStrategy.Overwrite);
    return rule(tree, _context);
  };
}

1 Ответ

0 голосов
/ 07 июля 2019

Добавьте это к своей схеме.json

{
 ...,
 "properties": {
  ..
  "path": {
   "type": "string",
   "format": "path",
   "description": "The path to create the simple schematic within.",
   "visible": false
  }
...