Как вызвать ng add из внешней схемы
Мне нужна помощь в вызове ng add для внешней угловой схемы. (Я пытаюсь добавить нг-импульс: https://github.com/BottleRocketStudios/ng-momentum) Я пытаюсь вызвать "нг добавить нг-импульс" из пользовательского интерфейса командной строки, но я столкнулся с проблемами, когда модуль "нг-импульс" не найден.
Я пытался вызвать метод externalSchematic из @angular-devkit/schematics несколькими различными способами, но чего-то не хватает.
Несколько разных реализаций, которые я пробовал:
return chain([
externalSchematic('ng-momentum', 'scaffold', {
project: options.project,
})
а также
return chain([
externalSchematic('ng-momentum', 'ng-add', {
}),
externalSchematic('ng-momentum', 'scaffold', {
spec: false,
force: true,
})
также как и
return chain([
externalSchematic('ng', 'add', {
project: options.project,
package: 'ng-momentum',
})
но я всегда получаю ту же ошибку, как описано ниже
Шаги воспроизведения
1) Запустите "npm i @lcu/cli -g" для установки пользовательского интерфейса командной строки
2) Создайте новую пустую папку, перейдите к ней
3) Запустите команду "lcu init". Назовите область действия "@scope" и рабочую область "test".
4) В той же папке выполните команду "lcu proj newProject", выберите "App". Выберите "Импульс"
Ожидаемое поведение: следуя инструкциям ng-импульса, если я создаю новый угловой проект (ng new newProject), а затем запускаю ng add (ng add ng -mentum) вне CLI, я получаю новый угловой проект и ng- приложение импульса.
Фактическое поведение: я получаю следующую ошибку: "Не удалось найти модуль"ng-momentum"из"C:\wherever\your\project\is"".
Кажется, я что-то упустил, но не совсем уверен, что. Пожалуйста, дайте мне знать, если нужна дополнительная информация, или если есть какие-либо вопросы.
Заранее спасибо!
0 ответов
Я попадаю в ту же проблему и нахожу для нее решение.
Проблема в том, чтобы запустить ng-momentum:ng-add
schematic вам нужно будет установить пакет перед этим, а также ng add
сделай это для нас.
Итак, вам нужно будет разбить вашу схему на два этапа: установить зависимости и ваше фактическое правило.
Взгляните на правило, которое запрашивает установку пакета, и поставьте свое правило в очередь.
export functions dependencies(options): Rule: Rule {
return (_tree: Tree, context: SchematicContext) => {
const installTaskId = context.addTask(new NodePackageInstallTask({
packageName: 'ng-momentum'
}));
context.addTask(new RunSchematicTask('after-dependencies', options), [installTaskId]);
}
}
Не бойтесь, ваш пользователь этого не увидит, если вы настроите свои коллекции таким образом.
{
"$schema": "../node_modules/@angular-devkit/schematics/collection-schema.json",
"schematics": {
"your-rule": {
"factory": "./what-ever/index#dependencies",
"schema": "./what-ever/schema.json"
},
"after-dependencies": {
"factory": "./what-ever/index#yourRule",
"schema": "./what-ever/schema.json",
"private": true,
}
}
}
Что ж, извините за задержку (9 месяцев), лучше, чем никогда.
С уважением,
Бернардо Баумблатт
Я боролся с вызовом externalSchematic из настраиваемой схемы добавления, и на самом деле библиотека, которую вы хотите вызвать из своего ng add, ДОЛЖНА быть установлена локально в вашем корневом package.json.
Вызов externalSchematic ищет package.json, и если он не установлен в корневом проекте схемы, он не будет работать.
Надеюсь, это связано с этой проблемой!