JavaScript混淆器对AngularJS有效吗?

11

有一些像http://www.javascriptobfuscator.com/Default.aspx这样的JavaScript混淆器,它们适用于简单的JavaScript代码。但是它们能否在更复杂的前端AngularJS代码上工作,这些代码可能包含多个控制器、服务和模块文件?

StackOverflow上的经验丰富的程序员使用什么工具来混淆他们的AngularJS代码?或者根本不混淆,因为无法混淆前端代码?


只需将您的代码压缩,以缩短客户端下载时间。混淆没有任何好处,而且混淆足以使代码变得非常难以处理。 - Blender
@Oriol:因为老板想要保护代码不受竞争对手的侵害。 - guagay_wk
@Blender:但是首先这是否可能呢? - guagay_wk
2
如果竞争对手的代码比垃圾更容易阅读,我会选择他们。 - dandavis
@user3293156:AngularJS是JavaScript,所以我不认为他们不支持。 - Blender
1个回答

19
你可以使用像Uglify或Closure Compiler这样的工具来压缩和混淆AngularJS代码,但由于Angular能够根据使用的变量名称注入依赖项(当你压缩或混淆代码时所有这些名称都会被更改),所以这可能会变得棘手。
您需要使用数组形式来定义您的模块、控制器等。这在Angular教程的第5步“关于Minification的注释”部分中有解释:https://docs.angularjs.org/tutorial/step_05 基本上,如果你目前正在使用依赖注入的速记法,例如:
myApp.controller('myController', function($scope, $http) { ... });

您需要将其更改为更冗长的基于数组的方法:

myApp.controller('myController', ['$scope', '$http', function($scope, $http) { ... }]);

使用字符串来告诉angular在函数中注入哪些对象,而不是依赖于$scope和$http变量本身的名称。这样做不会在缩小(minification)期间发生改变。

如果您不想修改代码库,有一个名为ngmin的命令行工具可以自动为您进行这些更改:https://github.com/btford/ngmin

ngmin的自述文件中的“概念概述”部分也对这个问题有很好的解释。


4
“uglify”或者“Closure Compiler”不会混淆AngularJS代码或者其他代码,它们只进行压缩(minification)。 - napstercake
这对我们大多数人来说已经足够混淆了(肯定比没有好;需要一个决心的人一段时间才能进行逆向工程)。 - Mawg says reinstate Monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接