错误:架构验证失败并出现以下错误:数据路径“”不应具有其他属性(项目)
Posted
技术标签:
【中文标题】错误:架构验证失败并出现以下错误:数据路径“”不应具有其他属性(项目)【英文标题】:Error: Schema validation failed with the following errors: Data path "" should NOT have additional properties(project) 【发布时间】:2019-02-23 04:34:58 【问题描述】:将应用程序从 angular 5 迁移到 6 后,在运行 ng serve 时会弹出以下错误。
架构验证失败,出现以下错误: 数据路径“”不应该有额外的属性(项目)。 错误:架构验证失败,出现以下错误: 数据路径“”不应该有额外的属性(项目)。 在 MergeMapSubscriber._registry.compile.pipe.operators_1.concatMap.validatorResult [作为项目] (.../TemplateApp/me-cmf-web-template-angular/node_modules/@angular-devkit/core/src/workspace/workspace. js:210:42) 在 MergeMapSubscriber._tryNext (/.../me-cmf-web-template-angular/node_modules/@angular-devkit/core/node_modules/rxjs/internal/operators/mergeMap.js:65:27) 在 MergeMapSubscriber._next (.../me-cmf-web-template-angular/node_modules/@angular-devkit/core/node_modules/rxjs/internal/operators/mergeMap.js:55:18) 在 MergeMapSubscriber.Subscriber.next (/home/training/Attinad_Projects/TemplateApp/me-cmf-web-template-angular/node_modules/@angular-devkit/core/node_modules/rxjs/internal/Subscriber.js:64:18) 在 MergeMapSubscriber.notifyNext (.../TemplateApp/me-cmf-web-template-angular/node_modules/@angular-devkit/core/node_modules/rxjs/internal/operators/mergeMap.js:84:26) 在 InnerSubscriber._next (.../me-cmf-web-template-angular/node_modules/@angular-devkit/core/node_modules/rxjs/internal/InnerSubscriber.js:25:21) 在 InnerSubscriber.Subscriber.next (/.../me-cmf-web-template-angular/node_modules/@angular-devkit/core/node_modules/rxjs/internal/Subscriber.js:64:18) 在 MapSubscriber._next (.../me-cmf-web-template-angular/node_modules/@angular-devkit/core/node_modules/rxjs/internal/operators/map.js:52:26) 在 MapSubscriber.Subscriber.next (/.../me-cmf-web-template-angular/node_modules/@angular-devkit/core/node_modules/rxjs/internal/Subscriber.js:64:18) 在 SwitchMapSubscriber.notifyNext (.../me-cmf-web-template-angular/node_modules/@angular-devkit/core/node_modules/rxjs/internal/operators/switchMap.js:77:26)
我假设错误与我从 .angular-cli.json 重命名的 .angular.json 文件有关。
我的 .angular.json 文件如下:
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"project":
"name": "mediaweb"
,
"apps": [
"root": "src",
"outDir": "dist/browser",
"assets": [
"assets",
"favicon.ico"
],
"index": "index.html",
"main": "main.ts",
"polyfills": "polyfills.ts",
"test": "test.ts",
"tsconfig": "tsconfig.app.json",
"testTsconfig": "tsconfig.spec.json",
"prefix": "app",
"styles": [
"styles.scss",
"../node_modules/owl.carousel/dist/assets/owl.carousel.css",
"../node_modules/owl.carousel/dist/assets/owl.theme.default.css",
"../node_modules/video.js/dist/video-js.css"
],
"scripts": [
"../node_modules/jquery/dist/jquery.js",
"../node_modules/owl.carousel/dist/owl.carousel.js",
"../node_modules/video.js/dist/ie8/videojs-ie8.js",
"../node_modules/video.js/dist/video.js"
],
"environmentSource": "environments/environment.ts",
"environments":
"dev": "environments/environment.dev.ts",
"prod": "environments/environment.prod.ts"
,
"platform": "server",
"root": "src",
"outDir": "dist/server",
"assets": [
"assets",
"favicon.ico"
],
"index": "index.html",
"main": "main.server.ts",
"test": "test.ts",
"tsconfig": "tsconfig.server.json",
"testTsconfig": "tsconfig.spec.json",
"prefix": "app",
"styles": [
"styles.scss"
],
"scripts": [],
"environmentSource": "environments/environment.ts",
"environments":
"dev": "environments/environment.dev.ts",
"prod": "environments/environment.prod.ts"
],
"e2e":
"protractor":
"config": "./protractor.conf.js"
,
"lint": [
"project": "src/tsconfig.app.json",
"exclude": ["**/node_modules/**", "**/UI/**"]
,
"project": "src/tsconfig.spec.json",
"exclude": "**/node_modules/**"
,
"project": "e2e/tsconfig.e2e.json",
"exclude": "**/node_modules/**"
],
"test":
"karma":
"config": "./karma.conf.js"
,
"defaults":
"styleExt": "scss",
"component":
我是否应该重新构建 json 文件,如果可以,如何?
任何帮助都会很棒。
【问题讨论】:
这不是 angular.json 结构,你在升级时错过了一些东西......创建新的新项目并比较 angular.json 文件。 【参考方案1】:我认为这是与RxJS
的不兼容。你应该安装rxjs-compat
来解决这个问题。
npm install rxjs-compat
另外,文件的名称是angular.json
而不是.angular.json
【讨论】:
安装的 rxjs-compat 正在重新运行 ng serve,同样的问题仍然存在。我用 update.angular.io ,这个文档来迁移。【参考方案2】:angular.json的格式需要按照Angular6...你可以在下面查看我的angular.json或在Angular6中创建一个新项目,然后检查“项目”的格式头
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects":
"homePage6":
"root": "",
"sourceRoot": "src",
"projectType": "application",
"prefix": "app",
"schematics":
"@schematics/angular:component":
"styleext": "scss"
,
"architect":
"build":
"builder": "@angular-devkit/build-angular:browser",
"options":
"outputPath": "dist/homePage6",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "src/tsconfig.app.json",
"assets": [
"src/favicon.ico",
"src/assets",
"src/manifest.json"
],
"styles": [
"src/styles.scss"
],
"scripts": []
,
"configurations":
"production":
"fileReplacements": [
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"serviceWorker": true
,
"serve":
"builder": "@angular-devkit/build-angular:dev-server",
"options":
"browserTarget": "homePage6:build"
,
"configurations":
"production":
"browserTarget": "homePage6:build:production"
,
"extract-i18n":
"builder": "@angular-devkit/build-angular:extract-i18n",
"options":
"browserTarget": "homePage6:build"
,
"test":
"builder": "@angular-devkit/build-angular:karma",
"options":
"main": "src/test.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "src/tsconfig.spec.json",
"karmaConfig": "src/karma.conf.js",
"styles": [
"styles.scss"
],
"scripts": [],
"assets": [
"src/favicon.ico",
"src/assets",
"src/manifest.json"
]
,
"lint":
"builder": "@angular-devkit/build-angular:tslint",
"options":
"tsConfig": [
"src/tsconfig.app.json",
"src/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
,
"homePage6-e2e":
"root": "e2e/",
"projectType": "application",
"architect":
"e2e":
"builder": "@angular-devkit/build-angular:protractor",
"options":
"protractorConfig": "e2e/protractor.conf.js",
"devServerTarget": "homePage6:serve"
,
"lint":
"builder": "@angular-devkit/build-angular:tslint",
"options":
"tsConfig": "e2e/tsconfig.e2e.json",
"exclude": [
"**/node_modules/**"
]
,
"defaultProject": "homePage6"
我遇到了类似(不完全相同,但也在 angular.json 中)的问题:
架构验证失败并出现以下错误:数据路径 “['server']”不应该有额外的属性(脚本)。错误: 架构验证失败并出现以下错误:数据路径 “['server']”不应该有额外的属性(脚本)。 在 MergeMapSubscriber._registry.compile.pipe.operators_1.concatMap.validatorResult [作为项目] (D:\Angular7\uHome\node_modules@angular-devkit\core\src\workspace\workspace.js:215:42) 在 MergeMapSubscriber._tryNext (D:\Angular7\uHome\node_modules\rxjs\internal\operators\mergeMap.js:69:27) 在 MergeMapSubscriber._next (D:\Angular7\uHome\node_modules\rxjs\internal\operators\mergeMap.js:59:18) 在 MergeMapSubscriber.Subscriber.next (D:\Angular7\uHome\node_modules\rxjs\internal\Subscriber.js:67:18) 在 MergeMapSubscriber.notifyNext (D:\Angular7\uHome\node_modules\rxjs\internal\operators\mergeMap.js:92:26) 在 InnerSubscriber._next (D:\Angular7\uHome\node_modules\rxjs\internal\InnerSubscriber.js:28:21) 在 InnerSubscriber.Subscriber.next (D:\Angular7\uHome\node_modules\rxjs\internal\Subscriber.js:67:18) 在 MapSubscriber._next (D:\Angular7\uHome\node_modules\rxjs\internal\operators\map.js:55:26) 在 MapSubscriber.Subscriber.next (D:\Angular7\uHome\node_modules\rxjs\internal\Subscriber.js:67:18) 在 SwitchMapSubscriber.notifyNext (D:\Angular7\uHome\node_modules\rxjs\internal\operators\switchMap.js:86:26)
必须从我的 angular.json 中删除属性脚本...分享这些信息以帮助将来的人。
【讨论】:
谢谢!这对我有帮助;删除属性脚本解决了我的问题【参考方案3】:因为我解决了这个问题,所以我认为最好在这里发布它。
我将文件名 .angular.json 更改为 angular.json 并替换了其中问题中的一些属性。
"$schema": "./node_modules/@angular-devkit/core/src/workspace/workspace-schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects":
"template-appv6":
"root": "",
"projectType": "application",
"architect":
"build":
"builder": "@angular-devkit/build-angular:browser",
"options":
"outputPath": "dist/browser",
"index": "src/index.html",
"main": "src/main.ts",
"tsConfig": "src/tsconfig.app.json",
"polyfills": "src/polyfills.ts",
"assets": [
"glob": "**/*",
"input": "src/assets",
"output": "/assets"
,
"glob": "favicon.ico",
"input": "src",
"output": "/"
],
"styles": [
"src/styles.scss"
],
"scripts": []
,
"configurations":
"production":
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"fileReplacements": [
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
]
,
"serve":
"builder": "@angular-devkit/build-angular:dev-server",
"options":
"browserTarget": "template-appv6:build"
,
"configurations":
"production":
"browserTarget": "template-appv6:build:production"
,
"extract-i18n":
"builder": "@angular-devkit/build-angular:extract-i18n",
"options":
"browserTarget": "template-appv6:build"
,
"test":
"builder": "@angular-devkit/build-angular:karma",
"options":
"main": "src/test.ts",
"karmaConfig": "./karma.conf.js",
"polyfills": "src/polyfills.ts",
"tsConfig": "src/tsconfig.spec.json",
"scripts": [],
"styles": [
"src/styles.css"
],
"assets": [
"glob": "**/*",
"input": "src/assets",
"output": "/assets"
,
"glob": "favicon.ico",
"input": "src",
"output": "/"
]
,
"lint":
"builder": "@angular-devkit/build-angular:tslint",
"options":
"tsConfig": [
"src/tsconfig.app.json",
"src/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
,
"server":
"builder": "@angular-devkit/build-angular:server",
"options":
"outputPath": "dist/server",
"main": "src/main.server.ts",
"tsConfig": "src/tsconfig.server.json"
,
"template-appv6-e2e":
"root": "",
"projectType": "application",
"cli": ,
"schematics": ,
"architect":
"e2e":
"builder": "@angular-devkit/build-angular:protractor",
"options":
"protractorConfig": "./protractor.conf.js",
"devServerTarget": "template-appv6:serve"
,
"lint":
"builder": "@angular-devkit/build-angular:tslint",
"options":
"tsConfig": [
"e2e/tsconfig.e2e.json"
],
"exclude": [
"**/node_modules/**"
]
,
"cli": ,
"schematics":
"@schematics/angular:component":
"prefix": "app",
"styleext": "css"
,
"@schematics/angular:directive":
"prefix": "app"
我通过将 angular.json 文件替换为 angular 官方文档中的属性来更改文件。
官方Angular Update Guide提供了如何更新版本的分步指南。
【讨论】:
【参考方案4】:将package.json
更改为:
"@angular-devkit/build-angular": "^0.13.5",
到:
"@angular-devkit/build-angular": "^0.12.1",
【讨论】:
【参考方案5】:更新npm
和angular
修复我的:
假设你使用npm
npm update
然后运行:
ng update
注意:系统可能会提示您更新各个依赖项。就我而言,系统提示我运行:
ng update @angular/cli
和 ng update @angular/core
。
【讨论】:
【参考方案6】:此问题通常是因为您的 package.json
文件中的版本不匹配。
在我的 Angular 7 应用程序中,我已将 "@angular-devkit/build-angular": "^0.800.2"
更改为 "@angular-devkit/build-angular": "~0.7.0"
。
然后我在删除node_modules
后运行命令npm install
。
旁白:谨慎使用^
。如果使用的包发生重大变化,您的工作代码将来可能无法工作。
【讨论】:
它也对我有用,谢谢。知道为什么它不适用于 0.800.2 版吗? 我猜是因为主要版本不匹配 为我工作:) 谢谢!继续支持。 @Sasikumar 谢谢,删除 node_modules 并运行npm i
为我解决了这个问题。我的问题是我有两个分支,其中一个有更新的角度版本。【参考方案7】:
我的应用在 Angular 7.2.3 上
从 angular.json 中移除 "es5BrowserSupport": true。 现在 npm start 可以工作了。
【讨论】:
es5BrowserSupport at true 是提高首次加载性能的好主意。禁用它不是解决方案... 你必须删除es5BrowserSupport
,在angular.json
(Angular ^v10) 内不能再使用这个键【参考方案8】:
第一:
npm uninstall @angular-devkit/build-angular
下一步:
npm install @angular-devkit/build-angular@0.12.4
【讨论】:
【参考方案9】:转到package.json
并更改@angular-devkit/build-angular的版本如下:
@angular-devkit/build-angular": "^0.12.4"
【讨论】:
【参考方案10】:当我遇到版本错误问题时,以下命令对我有用:
第一次运行:
npm update
第二次运行:
ng update
第三轮: (它会更新所有不匹配的包)
ng update --all --force
【讨论】:
【参考方案11】:我刚刚删除了 node_module 文件夹并运行
NPM 安装
对我来说效果很好。
这是一个 Angular 9 解决方案。
【讨论】:
【参考方案12】:Angular 从 9 升级到 10 非常简单(所有其他详细信息都在这里:https://update.angular.io/?v=9.0-10.0):
确保您的包文件受版本控制并且所有更改都已提交。这将覆盖您的包文件。最好在新的实验分支中尝试一下。
npm install -g npm-check-updates
ncu -u
ng update --all --force
在新架构中,不再允许使用密钥es5BrowserSupport
;删除 angular.json
中的以下行:
"es5BrowserSupport": true
然后只需重新启动您的应用程序:
npm start
【讨论】:
【参考方案13】:当将Angular
从版本8
升级到10
时,我得到了非常相似的错误,即Schema validation failed with the following errors: Data path "" should NOT have additional properties(serverTarget).
。
解决方案是从"serve"
下方删除所有"serverTarget"
引用。以下是错误:
"serve":
"builder": "@angular-devkit/build-angular:dev-server",
"options":
"browserTarget": "my_app:build"
"serverTarget": "my_app:server"
,
"configurations":
"production":
"browserTarget": "my_app:build:production",
"serverTarget": "my_app:server:production"
,
下面是正确并且编译成功:
"serve":
"builder": "@angular-devkit/build-angular:dev-server",
"options":
"browserTarget": "my_app:build"
,
"configurations":
"production":
"browserTarget": "my_app:build:production"
,
奖励给与Angular Universal
合作的人。如果你想在localhost
上运行 s-s-r,那么确实需要serverTarget
。但是,为此您必须在 angular.json
中创建一个新部分,例如:
"serve-s-s-r":
"builder": "@nguniversal/builders:s-s-r-dev-server",
"options":
"browserTarget": "my_app:build",
"serverTarget": "my_app:server"
,
"configurations":
"production":
"browserTarget": "my_app:build:production",
"serverTarget": "my_app:server:production"
,
然后ng run my_app:serve-s-s-r
。
实际上我在将Angular
从版本10
升级到8
时遇到了这个错误,并想改进一些东西。然后我用这种错误的想法搞砸了serverTarget
,希望这可以帮助项目中使用Angular Universal
的人。
【讨论】:
【参考方案14】:从 angular.json 文件中删除这两行:
"vendorSourceMap":"true",
"evalSourceMap":"true".
【讨论】:
【参考方案15】:从angular.json
中删除标志es5BrowserSupport: true
解决了这个问题。
由于我是从Angular7
更新到Angular11
,所以我从https://update.angular.io/ 升级指南中跳过了一点。
删除任何es5BrowserSupport flags in your angular.json
并设置您的target to es2015 in your tsconfig.json
。 Angular 现在使用您的浏览器列表来确定是否需要 ES5 构建。 ng update 会自动迁移你。
【讨论】:
【参考方案16】:在尝试了上面写的所有内容之后,它仍然没有用。 直到,我重新启动了我的系统。 将此添加到您的最后手段。
重启系统【讨论】:
【参考方案17】:当我们添加一些 angular.json 配置中不支持的属性时也会显示此错误
我们创建的 Angular 应用程序必须列在projects
属性下(带有's'),但在这种情况下它在project
下
列出了***属性here
【讨论】:
【参考方案18】:只需转到 angular.json 文件并删除
“extractCss”:真
在
生产部分。
【讨论】:
以上是关于错误:架构验证失败并出现以下错误:数据路径“”不应具有其他属性(项目)的主要内容,如果未能解决你的问题,请参考以下文章
Angular Schema 验证失败并出现以下错误:数据路径“”不应具有其他属性(rebaseRootRelativeCssUrls
Packer 自定义映像构建失败并出现 ssh 身份验证错误
WEBLOGIC 上出现“PKIX 路径验证失败:java.security.cert.CertPathValidatorException:时间戳检查失败”错误
使用 JPA 语法时,具有复杂键类的 JpaRepository 验证失败并出现错误“方法查询验证失败”