我已经使用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相关的库。我只想严格安装运行我的应用程序所需的内容(express
,body-parser
,cookie-parser
等)。
现在是实际问题:如果我手动将Angular的dependencies
移至devDependencies
,CLI是否仍能正常工作? ng更新之类的东西?是否会将某些依赖项从devDependencies
移到dependencies
?它会创建重复的条目吗?
答案 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
中重复,因此不用担心。