Угловая схема, код для изменения angular.json не собирается - PullRequest
0 голосов
/ 12 апреля 2019

Я использую схемы для создания стандартизированного проекта. У меня было несколько проблем, все они касались изменения файла 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, они не кажутся изменить что-либо

Есть что-то, чего я, конечно, здесь упускаю?

1 Ответ

0 голосов
/ 14 апреля 2019

Это не решение, но я просто создал другой проект, скопировал все и работал.

...