2016年4月1日星期五

压缩js时出现的问题

非压缩时,跑得好好的,压缩后,angualr的inject就不好使了,这种问题有时候真的很头痛,这也是angular的难搞的地方,到底哪个注入失败,看不出来。

追代码
发现
function configAngular($compileProvider) {
    'ngInject';
    $compileProvider.debugInfoEnabled(true);
} 
这样是没问题的
如果我注视掉
function configAngular($compileProvider) {
    'ngInject';
    //$compileProvider.debugInfoEnabled(true);
}
这样就有问题了,产生的js代码里,这个函数没有t.$inject这样的东西,uglify太聪明了,他认为这个函数是个空函数(啥也没干),就删掉了ngAnnotate产生的注入代码
configAngular.$inject = ["$compileProvider"];
了,虽然是个空函数,该注入的还是要注入啊,然后angular的函数有参数,却没有$inject,报错咯

明白了原因 ,就想到如何修改这个,
自然,注入了就要使用时到时最好,有没有别的法子来对付呢,我还得继续查查
https://github.com/mishoo/UglifyJS2
仔细看了Compressor options
没发现这样的参数可以对付这个情况
没法子,那就如何对付,我最后弄成这样的
function configAngular($compileProvider) {
    'ngInject';;
   //$compileProvider.debugInfoEnabled(true);
}
这样jshint会包一个警告,也就是ngInject后面多一个逗号
  line 98  col 16  Unnecessary semicolon.
于是我disable掉这个警告,大功告成,当然这个我只是用在app.config.es6里面
/* jshint -W032 */

没有评论:

发表评论