Нестандартная угловая схема: труба "dasherize" не определена. при запуске по угловому проекту - PullRequest
0 голосов
/ 08 мая 2019

Я создал простую новую схему, используя угловую схему cli. Эта схема принимает в качестве входных данных имя и создает файл в дереве. Моя директория files/ выглядит так:

src/
  app/
    __name@dasherize__.ts

Я построил его, а затем создал новый угловой проект:

ng new test-app --routing --style css

Затем я перехожу в каталог test-app и ссылаюсь на пример схемы:

npm link ../schematics/sample-schematic

Затем я запускаю свою схему:

ng g sample-schematic:sample

однако при этом я получаю следующую ошибку:

Pipe "dasherize" is not defined. 

Если я изменю имя файла в моем каталоге files на test.ts, оно будет работать нормально, и файл будет создан. Я предполагаю, что мне не хватает импорта для использования различных схематических функций в моем проекте test-app Мои зависимости и dev-зависимости для test-app выглядят так:

  "dependencies": {
    "@angular/animations": "~7.2.0",
    "@angular/common": "~7.2.0",
    "@angular/compiler": "~7.2.0",
    "@angular/core": "~7.2.0",
    ...
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.13.0",
    "@angular-devkit/core": "^7.3.9",
    "@angular-devkit/schematics": "^7.3.9",
    "@angular-devkit/schematics-cli": "^0.13.9",
    "@angular/cli": "~7.3.9",
    "@angular/compiler-cli": "~7.2.0",
    "@angular/language-service": "~7.2.0",
    "@schematics/angular": "^7.3.9",
    ...
  }

Ответы [ 2 ]

0 голосов
/ 30 июня 2019

Пожалуйста, проверьте это. Возможно, это поможет вам.

Обязательно импортируем strings

import { strings } from '@angular-devkit/core';

, а затем передайте strings в шаблонизатор, как показано ниже:

const sourceParametrizedTemplates = apply(sourceTemplates, [
  template({
    ...options,
    ...strings,
  })
]);

Нет необходимости назначать функции для options. (и все это так, изменение переменной options не будет хорошей практикой).

При этом функция dasherize будет доступна внутри имени, а также кода шаблона.

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

0 голосов
/ 08 мая 2019

Я нашел обходной путь, но это не совсем устраивает. Если у кого-то есть лучшее решение, я весь в ушах.

То, что я в итоге сделал - в функции, где я настраивал свои параметры / рабочее пространство и т. Д. Я добавил немного кода:

options.dashName = dasherize(options.name);
options.theName = camelize(options.name);
options.Name = classify(options.name);

Тогда в моих шаблонах я могу получить доступ к dashName, theName и Name для dashed, camelCase и PascalCase соответственно. До сих пор не уверен, почему каналы не работают в именах файлов (или в самих шаблонах), но сейчас это работает.

...