AngularJS

Większość bibliotek w JavaScipt jest serwowana w postaci zminifikowanej co generalnie oznacza, iż kod został skompresowany do jednej linii, a nazwy zmiennych skrócone tak aby plik js miał jak najmniejszy rozmiar. Weźmy jako przykład uproszczony SearchRouteController:

.controller 'SearchRouteController', ($scope, $location, SpotifyApi) -> $scope.search = $location.search().q or '' SpotifyApi.search($scope.search, ['album', 'artist']) .then (response) -> $scope.searchResults = response.data .controller('SearchRouteController', function($scope, $location, SpotifyApi) { $scope.search = $location.search().q || ''; SpotifyApi.search($scope.search, ['album', 'artist']) .then(function(response) { $scope.searchResults = response.data; }); })

Po minifikacji przez uglifyjs, będzie on wyglądał tak:

.controller("SearchRouteController",function(a,b,c){a.search=b.search().q||"",c.search(a.search,["album","artist"]).then(function(b){a.searchResults=b.data})});

Jak widać na powyższym przykładzie kod został skompresowany do jednej linii a nazwy zmiennych skrócone (a - $scope, b - $location itd.). Problem w tym że AngularJS na podstawie nazw argumentów fukcji określa jakie dokładnie zależnośći mają być zainicjalizowane i przekazane, w momencie kiedy te nazwy będą zminifikowane kod przestanie działać. Aby temu zapobiec można zapisać kontroler w bezpieczny sposób:

.controller 'SearchRouteController', [ '$scope', '$location', 'SpotifyApi', ($scope, $location, SpotifyApi) -> $scope.search = $location.search().q or '' SpotifyApi.search($scope.search, ['album', 'artist']) .then (response) -> $scope.searchResults = response.data ] .controller('SearchRouteController', [ '$scope', '$location', 'SpotifyApi', function($scope, $location, SpotifyApi) { $scope.search = $location.search().q || ''; SpotifyApi.search($scope.search, ['album', 'artist']) .then(function(response) { $scope.searchResults = response.data; }); } ])

Nasza konfiguracja gulpa automatycznie konwertuje kod do bezpiecznej postaci za pomocą ngAnnotate

ng-strict-di

Aby zasymulować działanie aplikacji po minifikacji, bez obfuskowania kodu, można dodać atrybut ng-strict-di do elementu z dyrektywą ng-app. Wtedy Angular nie będzie brał pod uwagę nazw argumentów funkcji i będzie wymagał podania nazw usług bezpośrednio, np. przez notację listową.