两年前,写过一篇使用汇总来为生产环境编译角2应用的文章,因为当时还没有angular-cli项目。而如今角已经到7了。x版本,对应的工具也是非常的完善,也就不在使用汇总来处理角项目。
angular-cli用起来虽然方便,但是针对生产环境编译的话,还是有一些地方要注意的,接下来就介绍我在项目部署时的一些做法。
<强>合理拆分功能模块,按需加载强>
一个系统往往功能非常多,因此就要根据项目的实际情况划分功能模块,一个功能模块对应一个NgModule,编译成一个独立的js文件,再结合角的路由技术进行按需加载,就这一功能点来说,角的支持已经非常的完善了。
const路线:路线=( {路径:“redirectTo:/home, pathMatch:“全部”}, {路径:“回家”,loadChildren:“/home/home。模块# HomeModule '}, {路径:“关于”,loadChildren:“。/关于/D?? AboutModule '}, { 路径:“arcgis”, loadChildren:“。/arcgis arcgis.module # ArcgisModule ', canLoad (EsriLoaderGuard): });
这一点经常容易被忽视,曾经就出现过犹豫没有合理划分模块,导致编译出来的js文件高达5兆,造成的客户体验非常差。(甚至还出现开发机内存不足,无法成功编译的情况)
<强>预先压缩js文件强>
当然,仅仅考合理划分js模块的话,还往往不太够,因为单个模块也可能会比较大,可能会超过1兆,特别是使用了一些第三方控件(ng-bootstrap, ng-zorro等)的情况下。
针对这种情况,通常还需要对编译生成的js文件进行gzip压缩,因此在执行<代码> ng构建——刺激> 代码编译之后,再继续执行下面壳的命令:
找到dist - name”*。js”-print0 | xargs 0 gzip - k
当然,如果发现编译生成css文件比较大的话,也可以通过下面的命令进行压缩:
找到dist - name”*。css“-print0 | xargs 0 gzip - k
以一个仅仅使用了ng-bootstrap的模板项目为例,生成的js文件如下所示:
1.8 k dist/ng-seed/4.1495 aba38157395f4a2d.js 1.7 k dist/ng-seed/5. ec7eb27ea7c8eee53bcc.js 482 k dist/ng-seed/main.6ee651175769ea64ed5f.js 37 k dist/ng-seed/polyfills.5d61d41949cb87471fa8.js 2.2 k dist/ng-seed runtime.c66e13242c809a55bd2f.js
其中的<代码> main.6ee651175769ea64ed5f。js代码>就有482 kb,而经过gzip压缩之后,文件大小显著减小:
1.8 k dist/ng-seed/4.1495 aba38157395f4a2d.js 1.0 k dist/ng-seed/4.1495 aba38157395f4a2d.js.gz 1.7 k dist/ng-seed/5. ec7eb27ea7c8eee53bcc.js 888 b ec7eb27ea7c8eee53bcc.js.gz dist/ng-seed/5. 482 k dist/ng-seed/main.6ee651175769ea64ed5f.js 124 k dist/ng-seed/main.6ee651175769ea64ed5f.js.gz 37 k dist/ng-seed/polyfills.5d61d41949cb87471fa8.js 12 k dist/ng-seed/polyfills.5d61d41949cb87471fa8.js.gz 2.2 k dist/ng-seed/runtime.c66e13242c809a55bd2f.js 1.2 k dist/ng-seed runtime.c66e13242c809a55bd2f.js.gz
<代码> main.6ee651175769ea64ed5f.js。广州> 代码有124 kb,只有原来的1/4。
一般来说,对于角项目编译出的js文件,gzip压缩能减少3/4甚至4/5的体积,这样将会显著减轻网络传输的压力。
<强>使用nginx作为服务器强>
为什么使用nginx作为前端服务器呢?原因如下:
<>强支持传输预先压缩的js文件强>
将预先压缩好的. js。广州和原来的js文件一起上传到服务器,只要在nginx服务器的配置文件上加一句gzip_static> 位置/ng-app { 根/usr/share/nginx/html; 指数指数。html你; gzip_static> 位置/api { proxy_pass http://api-server: 8080/api; proxy_read_timeout 600年代; proxy_redirect; proxy_set_header主机主机美元; proxy_set_header X-Real-IP remote_addr美元; proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for美元; proxy_set_header X-Forwarded-Proto美元计划; } >之前
<强>官方的码头工人镜像强>
nginx有码头工人的官方镜,像部署,升级都是非常的方便。不得不说码头工人确实是好东西,用了就停不下来了。
这几点都是在项目中积累的一些小技巧,如果想要了解细节,请查看这个ng-seed项目。