Angular:为什么在新的npm安装之后,package-lock.json的软件包版本会高于package.json?

Angular:为什么在新的npm安装之后,package-lock.json的软件包版本会高于package.json?,angular,npm,Angular,Npm,我的理解是,npm(早在2017年?)决定更新package.json中版本高于package-lock.json中版本的任何包 我观察到我的项目似乎自发地升级了我不想升级的包,这是一个有趣的现象 例如,我最近切换到Angular 9,我开始遇到一些奇怪的错误,比如: 无法绑定到“ngIf”,因为它不是“button”的已知属性 我没有运气(也就是说,我在StackBlitz上没有得到同样的错误:它似乎在那里工作得很好)。因为,我决定在我的本地项目(github版本)上降级我的core js版本

我的理解是,npm(早在2017年?)决定更新package.json中版本高于package-lock.json中版本的任何包

我观察到我的项目似乎自发地升级了我不想升级的包,这是一个有趣的现象

例如,我最近切换到Angular 9,我开始遇到一些奇怪的错误,比如:

无法绑定到“ngIf”,因为它不是“button”的已知属性

我没有运气(也就是说,我在StackBlitz上没有得到同样的错误:它似乎在那里工作得很好)。因为,我决定在我的本地项目(github版本)上降级我的core js版本,以尽可能接近stack blitz的工作内容

这就是我困惑的地方。我删除了node_模块和package-lock.json,并将我的package.json更改为以下内容:

{
  "name": "data-jitsu",
  "version": "0.0.0",
  "license": "MIT",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "cypress open"
  },
  "private": true,
  "dependencies": {
    "@angular-devkit/build-angular": "^0.801.1",
    "@angular/animations": "^9.1.9",
    "@angular/cdk": "^9.2.4",
    "@angular/common": "^9.1.9",
    "@angular/compiler": "^9.1.9",
    "@angular/core": "^9.1.9",
    "@angular/fire": "^6.0.0",
    "@angular/forms": "^9.1.9",
    "@angular/material": "^9.2.4",
    "@angular/platform-browser": "^9.1.9",
    "@angular/platform-browser-dynamic": "^9.1.9",
    "@angular/router": "^9.1.9",
    "@types/youtube": "^0.0.29",
    "ajv": "^6.10.2",
    "angular-froala-wysiwyg": "^2.7.2-1",
    "core-js": "^2.0.0",
    "d3": "^4.13.0",
    "firebase": "^7.15.0",
    "grpc": "^1.24.3",
    "hammerjs": "^2.0.8",
    "jquery": "^3.0.0",
    "moment": "^2.26.0",
    "ng-starrating": "^1.0.7",
    "ngx-materialize": "^6.1.3",
    "ngx-youtube-player": "^7.1.1",
    "rxjs": "^6.0.0",
    "stripe": "^7.9.1",
    "zone.js": "^0.10.3"
  },
  "devDependencies": {
    "@angular/cli": "^9.1.7",
    "@angular/compiler-cli": "^9.1.9",
    "@angular/language-service": "^6.0.3",
    "@cypress/webpack-preprocessor": "^4.1.0",
    "@types/bootstrap": "^3.3.36",
    "@types/d3": "^4.13.0",
    "@types/jasmine": "~2.8.6",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "10.0.4",
    "chance": "^1.1.6",
    "codelyzer": "^5.0.0",
    "cypress": "^3.8.1",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "^3.0.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-cli": "~1.0.1",
    "karma-coverage-istanbul-reporter": "~2.0.0",
    "karma-jasmine": "~1.1.1",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "^5.4.0",
    "ts-loader": "^6.0.4",
    "ts-node": "~5.0.1",
    "tslint": "~5.9.1",
    "typescript": "~3.7.0",
    "webpack": "^4.36.1"
  }
}
运行
npm install
后,package-lock.json将被还原,看起来像(对于这个问题来说太长了)


在package-lock.json中似乎有许多不同版本的core js,其中一些版本高于v3.0.0,尽管我在package.json中指定了
“core js”:“^2.0.0”
。有人能解释为什么,以及为什么这种行为(如果不是bug)是可取的吗?

即使您已将corejs版本指定为2.0.0,您的一些依赖项可能需要更高的版本来满足其要求。例如,@angular devkit/build angular需要corejs版本(3.1.4),该版本明显高于您提到的包。这可能会导致同一数据库中存在多个corejs版本。核心思想是npm按照package.json中提到的顺序解析依赖项。下面的链接将告诉您如何解决依赖关系