Angular 原理图,修改代码 angular.json 不在一起
Angular Schematics, code to modify angular.json is not coming together
我一直在使用原理图生成标准化项目。我有几个问题,所有问题都与 angular.json
文件
的修改有关
下面的代码是我尝试过的示例,在一个可以正常工作的函数中执行(除了另一件事),除了这部分之外,其中的所有内容都会执行,这会引发错误:
Cannot read property 'includePaths' of undefined
这对我来说没有任何意义。
你在这里看到的另一个问题是我似乎无法捕获项目名称,因为我需要修改 angular.json
文件中 "architect" 里面的内容,我有跳过项目名称,我的解决方法是手动输入项目名称
ng add myschemat --name=new-app
但我应该能够捕捉到这个 属性,我已经尝试过并且确实可以在控制台中看到它但是在替换时
options.name 对于 p (来自评论的 forEach
函数)它不起作用并显示无法获取'架构师 属性 of 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 修改,他们似乎没有改变任何东西
这里有什么我肯定遗漏的吗?
这不是解决方案,但我刚刚创建了另一个项目,复制了所有内容,然后开始工作。
我一直在使用原理图生成标准化项目。我有几个问题,所有问题都与 angular.json
文件
下面的代码是我尝试过的示例,在一个可以正常工作的函数中执行(除了另一件事),除了这部分之外,其中的所有内容都会执行,这会引发错误:
Cannot read property 'includePaths' of undefined
这对我来说没有任何意义。
你在这里看到的另一个问题是我似乎无法捕获项目名称,因为我需要修改 angular.json
文件中 "architect" 里面的内容,我有跳过项目名称,我的解决方法是手动输入项目名称
ng add myschemat --name=new-app
但我应该能够捕捉到这个 属性,我已经尝试过并且确实可以在控制台中看到它但是在替换时
options.name 对于 p (来自评论的 forEach
函数)它不起作用并显示无法获取'架构师 属性 of 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 修改,他们似乎没有改变任何东西
这里有什么我肯定遗漏的吗?
这不是解决方案,但我刚刚创建了另一个项目,复制了所有内容,然后开始工作。