ionic工程发布时,有的工程由于代码量比较大,所以需要对js代码进行合并、压缩,而有的为了安全还需要代码混淆。本文参考上面的参考链接,进行了相应的调整,采用更适合自己项目的方法来进行代码合并、压缩和混淆。
文中的ionic项目目录结构如下:
其中html和js文件都在scripts目录下,并且同一功能的js和html在同一目录下
本文基于ionic 1.* 以及 angular 1.*
将html页面转换为angular的JS代码
这一步是将html页面代码转换成angular的js代码(保存到一个js文件中)。
安装gulp-angular-templatecache
|
|
修改gulpfile.js文件
加入以下代码:
在app.js中增加templates模块依赖
|
|
测试
|
|
执行完毕后能在www/scripts目录下看到templates.js文件,可以打开看看是不是想要的结果。
这时也可以在index.html中手动加入templates.js的引用,然后通过ionic serve就可以在浏览器测试一下效果
将www/scripts/templates.js引用加入到index.html
首先,执行完上一步后可以手动在index.hmtl中加入templates.js的引用,然后就可以通过ionic serve
在浏览器看到效果。但是对于强迫症的我以及对于后面项目自动化打包来说,能自动是最好的。
安装gulp-inject
|
|
修改www/index.html文件
在index.html中引入项目www/scripts目录下的js的地方(index.hmtl中项目自己写的js引入、lib里面的js、ionic框架的js以及一些远程的js的引入是分开的)加入以下代码:
修改gulpfile.js文件
加入以下代码:
|
|
测试
|
|
执行完后可以运行ionic serve
测试
合并js及css文件
安装gulp-useref
这里安装2.1.0版本,可以看看最新版的差别然后进行相应的修改
|
|
修改gulpfile.js文件
加入以下代码:
修改www/index.html文件
注意:可能有些外部的css文件或js文件不想被处理,那么就保持原状即可。
css文件处理(只列出部分文件):
我的项目
lib/ionic/css/ionic.min.css
不属于处理范围
lib js文件处理(只列出部分文件):
我的项目
lib/ionic/js/ionic.bundle.min.js
和cordova.js
不属于处理范围
项目js 文件处理(只列出部分文件):
测试
|
|
执行完后会生成以下文件:
同时index.html也会改变,引入文件的地方会变成新生成的文件的引入。
然后通过$ ionic serve
在浏览器测试
进行严格依赖注入
这里在代码合并之后才进行严格依赖注入,有两个原因:
- lib里面的库有的并不是很规范,所以需要先把lib合并再进行依赖注入,所以如果不需要合并lib,就可以不用先合并再进行依赖注入
- 先合并文件,再进行依赖注入,这样只需要对合并后的一两个文件做操作,而不需要改变所有的js文件
在进行代码压缩混淆之前,我们需要启用angular的ng-strict-di,即严格依赖注入,使得工程中依赖注入不会有问题,更多关于ng-strict-di可以看这里。
安装gulp-ng-annotate
|
|
修改gulpfile.js文件
加入以下代码:
测试
|
|
执行完后www/scripts下的js文件都会进行依赖注入调整
压缩混淆js代码
安装gulp-uglify
|
|
修改gulpfile.js文件
加入以下代码:
|
|
测试
|
|
执行完后可以看到scripts目录下的vendor.js和app.join.js是压缩混淆后的代码,然后可以通过$ ionic serve
在浏览器测试
压缩图片
安装gulp-imagemin
|
|
修改gulpfile.js文件
加入以下代码:
|
|
测试
|
|
执行完后www目录下会生成images文件夹,里面是压缩过后的图片
利用hooks删除platforms里面的开发文件
拷贝hooks文件020_remove_dev_files_from_platform.js
将文件添加到./hooks/after_prepare文件夹中,将相关的文件夹目录改成自己需要的目录,然后给文件添加执行权限:
测试
可以运行以下命令测试:
执行完后相关目录下应该只会有压缩过后文件
题外:通过gulp删除开发文件
有时候如果需要进行热更新,比如code-push,就需要对开发目录进行调整,删除开发目录下不必要的文件,这时可以用gulp,在gulpfile加入以下代码:
|
|
然后运行$ gulp rm-dev-file
测试
最后
- 相关的配置命令、打包命令以及打包完的git checkout等命令可以通过shell脚本来一次性处理
- 不推荐在
$ ionic serve
时实时压缩混淆代码,一方面没有必要,另一方面开发的时候不压缩混淆会更方便调试 - 不推荐在gulpfile里面将压缩混淆的命令用
$ gulp.task('compress', ['templatecache', 'inject-templates', 'useref'...]);
这种方式来执行,因为gulp执行的顺序可能不是你想要的