【问题标题】: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 文件。

标签: angular typescript migration angular5 angular6


【解决方案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】:

      更新npmangular修复我的:

      假设你使用npm

      npm update
      

      然后运行:

      ng update
      

      注意:系统可能会提示您更新各个依赖项。就我而言,系统提示我运行:

      ng update @angular/cling 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 上运行 SSR,那么确实需要serverTarget。但是,为此您必须在 angular.json 中创建一个新部分,例如:

                  "serve-ssr": {
                    "builder": "@nguniversal/builders:ssr-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-ssr

                  实际上我在将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”:真

                            生产部分。

                            【讨论】:

                              猜你喜欢
                              • 2021-11-05
                              • 2021-08-22
                              • 2022-09-30
                              • 2021-04-01
                              • 2020-07-11
                              • 1970-01-01
                              • 2019-10-25
                              • 1970-01-01
                              • 1970-01-01
                              相关资源
                              最近更新 更多