为何Angular5容器化部署AWS需将开发依赖移至生产依赖?
为什么Angular 5用
ng serve --prod时需要将开发依赖移到生产依赖? 好问题!这背后主要和Angular CLI的生产模式行为、以及容器环境依赖安装的逻辑有关,我给你拆解一下:
--prod模式启用了AOT编译,需要@angular/compiler-cli
当你加上--prod参数时,Angular CLI会触发生产级别的构建优化,其中就包括AOT(提前编译)。AOT编译需要@angular/compiler-cli这个工具来将Angular模板预编译成JavaScript,而不是在浏览器运行时动态编译。如果这个包只在devDependencies里,容器执行npm install --production时会跳过安装,导致AOT编译失败,应用无法启动。ng serve命令依赖@angular/cli本身ng serve是@angular/cli提供的开发服务器命令,当你在容器中直接运行这个命令时,系统需要能找到@angular/cli的模块。如果它在devDependencies里,生产环境安装依赖时不会被包含,自然就会出现找不到命令或模块的错误。容器部署的常规误区:用
ng serve跑生产环境并不合适
顺便提一句,通常生产部署Angular应用的正确流程是:- 在本地或CI环境执行
ng build --prod,生成dist目录下的静态文件 - 将
dist目录部署到Nginx、Apache这类静态文件服务器上
直接用ng serve运行生产环境是不推荐的,因为它是开发用的服务器,性能、稳定性和安全性都达不到生产要求,而且还得带着整个CLI和编译依赖,镜像体积会很大。
- 在本地或CI环境执行
内容的提问来源于stack exchange,提问作者LunaticJape
相关产品推荐
相关产品推荐

