将Angular的依赖项移至devDependencies

时间:2019-10-29 10:04:56

标签: angular angular-cli

我已经使用Angular CLI ng new my-dream-app生成了一个项目,并且我注意到在package.json中得到了以下依赖关系结构

{
  "dependencies": {
    "@angular/animations": "~8.2.11",
    "@angular/common": "~8.2.11",
    "@angular/compiler": "~8.2.11",
    "@angular/core": "~8.2.11",
    "@angular/forms": "~8.2.11",
    "@angular/platform-browser": "~8.2.11",
    "@angular/platform-browser-dynamic": "~8.2.11",
    "@angular/router": "~8.2.11",
    "rxjs": "~6.4.0",
    "tslib": "^1.10.0",
    "zone.js": "~0.9.1"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.803.14",
    "@angular/cli": "~8.3.14",
    "@angular/compiler-cli": "~8.2.11",
    "@angular/language-service": "~8.2.11",
    "@types/node": "~8.9.4",
    "@types/jasmine": "~3.3.8",
    "@types/jasminewd2": "~2.0.3",
    "codelyzer": "^5.0.0",
    "jasmine-core": "~3.4.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~4.1.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.1",
    "karma-jasmine": "~2.0.1",
    "karma-jasmine-html-reporter": "^1.4.0",
    "protractor": "~5.4.0",
    "ts-node": "~7.0.0",
    "tslint": "~5.15.0",
    "typescript": "~3.5.3"
  }
}

现在想象一下,我正在使用CLI生成的项目以及用于处理静态资产的后端框架(例如expressjs)。 此外,假设我想在某个云服务上部署我的应用程序。

我可以在本地构建静态资产,然后将整个项目移动到云中,我将在其中运行npm i --production以仅安装依赖项,然后运行npm start 但是,我不想在云上安装任何与Angular相关的库。我只想严格安装运行我的应用程序所需的内容(expressbody-parsercookie-parser等)。

现在是实际问题:如果我手动将Angular的dependencies移至devDependencies,CLI是否仍能正常工作? ng更新之类的东西?是否会将某些依赖项从devDependencies移到dependencies?它会创建重复的条目吗?

1 个答案:

答案 0 :(得分:2)

Angular CLI创建一个package.json文件,该文件在运行时在dependencies下的Angular项目中列出了所需的软件包,以及在devDependencies下使用CLI进行构建所需的软件包。我真的不建议将dependencies移到devDependencies,但是我有这样做的一般想法,因为在运行时,这些软件包已经使用Webpack打包到了您的应用程序中。

回答您的问题:要使用CLI构建Angular 2+,您肯定需要安装Angular的核心软件包(例如@angular/core@angular/compiler-cli等),因此将这些软件包移至devDependencies并使用npm i --production将使您无法构建应用。因此,我不建议您使用npm i --production

我建议使用npm prune --production,如果您不希望以后再安装它们(例如,在构建后,如果您要部署您的{应用)。这就是我的团队。

另外,为了回答您的最后一个问题,devDependencies使用ng update CLI来安装软件包; AFAIK,NPM不允许在其npm中重复,因此不用担心。