现在的位置: 首页 > 综合 > 正文

Minifying Angular应用时产生的问题

2016年10月17日 ⁄ 综合 ⁄ 共 1332字 ⁄ 字号 评论关闭

一、产生的问题

如果你正在进行AngularJS的项目开发,生产时Minified JS文件有没有遇到下面问题:

1
2
3
4
angular.module("myApp",
[])
.controller("mainController",
function($scope)
{
    $scope.message
=
"Hello,
Benjamin!"
;
});

在这个例子中,Angular解析后知道它需要使用$scope依赖,下面我们看看最小化的情况:

1
angular.module("myApp",[]).controller("mainController",function(a){a.message="Hello,
Benjamin!"
;});

Minified后$scope被最小化成了变量a,此时Angular无法去解析声明的依赖。因此会报错。

二、解决方式

那么如何解决这个问题呢?下面是一些解决方式,如果你有其它好的解决方式,欢迎留言。

方式一:显示声明依赖注入

1
2
3
4
5
6
7
8
var mainController
=
function($scope)
{
    $scope.message
=
"Hello,
Benjamin!"
;
};
 
angular.module("myApp",
[])
.controller("mainController",
mainController); 
 
mainController['$inject']
= [
'$scope'];

Minified

1
var mainController=function(a){a.message="Hello,
Benjamin!"
;};angular.module("myApp",[]).controller("mainController",mainController);mainController["$inject"]=["$scope"];

方式二:内嵌式依赖

1
2
3
4
angular.module("myApp",
[])
.controller("mainController",
[
'$scope',
'$http',
function($scope,
$http) {
    $scope.message
=
"Hello,
Benjamin!"
;
}]);   

Minified

1
angular.module("myApp",[]).controller("mainController",["$scope","$http",function(a,b){a.message="Hello,
Benjamin!"
;}]);

这种方式,在使用模块化时需要我们有好的编码习惯。

方式三:使用ng-annotate

关于ng-annotate的详细信息请戳这里,常使用在NodeJS环境。 Install:

1
$
npm
install -g
ng-annotate

Using:

1
$
ng-annotate OPTIONS <
file>

使用时,我们可以结合Gulp、Grunt等自动化工具使用,提高开发效率。

三、方式对比

对比以上方式,个人比较偏向方式二,但是如果项目(自动化)生产中已经产生此问题,可配合gulp,Grunt自动化工具使用解决问题则较为方便。

抱歉!评论已关闭.