Я использую схемы для создания стандартизированного проекта. У меня было несколько проблем, все они касались изменения файла angular.json
Следующий код представляет собой пример того, что я пробовал, выполняется внутри функции, которая работает (за исключением другой вещи), и все в ней выполняется, кроме этой части, которая выдает ошибку:
Невозможно прочитать свойство 'includePaths' из неопределенного
, что не имеет никакого смысла для меня.
Другая проблема, которую вы можете увидеть здесь, заключается в том, что я не могу захватить название проекта, потому что мне нужно изменить содержимое внутри «architect» в файле angular.json
, я должен пройти мимо имени проекта у меня есть обходной путь, чтобы вручную ввести имя проекта как
ng add myschemat --name=new-app
Но я должен иметь возможность захватить это свойство, которое я пробовал, и увидеть его в консоли, но при замене
options.name для p (из прокомментированной функции forEach
) не работает и показывает, что не может получить свойство архитектуру undefined
import {NodePackageInstallTask} from '@angular-devkit/schematics/tasks';
[...]
if(_host.exists('angular.json')){
const angularStr = _host.read('angular.json') !.toString('utf-8')
const angular = JSON.parse(angularStr)
const projs = (Object.keys( angular['projects'] )).slice(0, 1); //also tried [0]
console.log("App Detection & your options: \n", projs, "\n", options)
// projs.forEach((p: string | number) => {
angular['projects'][options.name]['architect']['build']['options']['stylePreprocessorOptions'] =
{
"includePaths": ["src/scss/"]
}
angular['projects'][options.name]['architect']['build']['options']['es5BrowserSupport']= true;
angular['projects'][options.name]['architect']['build']['options']['styles'].push(
[
"node_modules/devextreme/dist/css/dx.common.css",
"node_modules/devextreme/dist/css/dx.light.css",
"src/styles.scss"
]
)
// });
_host.overwrite('angular.json', JSON.stringify(angular, null, '\t'))
_context.addTask( new NodePackageInstallTask )
}
Что должно было произойти, это добавить свойство объекта
"styles": [
"node_modules/devextreme/dist/css/dx.common.css",
"node_modules/devextreme/dist/css/dx.light.css",
"src/styles.scss"
],
"scripts": [],
"es5BrowserSupport": true,
"stylePreprocessorOptions": {
"includePaths": [
"src/scss/"
]
}
пока, когда я компилирую ng add myschemat --name=new-app
установка останавливается и просто показывает: Невозможно прочитать свойство 'includePaths' из неопределенного
Это странно, потому что на самом деле это работало, я просто добавил пару стилей и это истинное свойство, а также некоторые изменения в package.json (и хотя они происходят до этой модификации angular.json, они не кажутся изменить что-либо
Есть что-то, чего я, конечно, здесь упускаю?