2015-02-27 7 views
7

Próbuję zminimalizować pliki javascripts i css w mojej aplikacji angularjs za pomocą samaxes minify maven plugin. Jestem w stanie uzyskać wszystkie js & css minified i zbudować plik wojenny z maven, ale podczas próby otwarcia adresu URL aplikacji otrzymuję Error: [$injector:unpr] Unknown provider: aProvider <- a, a moja aplikacja nie działa.Jak poprawnie używać minify maven plugin do min js i css w aplikacji Angularjs?

Poniżej przytaczam moją konfigurację wtyczek pom

<plugin> 
    <groupId>com.samaxes.maven</groupId> 
    <artifactId>minify-maven-plugin</artifactId> 
    <version>1.7.4</version> 
    <executions> 
     <execution> 
      <id>min-js</id> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>minify</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <charset>UTF-8</charset> 
     <skipMerge>true</skipMerge> 
     <cssSourceDir>myapp/styles</cssSourceDir> 
     <jsSourceDir>myapp/javascript</jsSourceDir> 
     <jsEngine>CLOSURE</jsEngine> 
     <closureLanguage>ECMASCRIPT5</closureLanguage> 
     <closureAngularPass>true</closureAngularPass> 
     <nosuffix>true</nosuffix> 
     <webappTargetDir>${project.build.directory}/minify</webappTargetDir> 
     <cssSourceIncludes> 
      <cssSourceInclude>**/*.css</cssSourceInclude> 
     </cssSourceIncludes> 
     <cssSourceExcludes> 
      <cssSourceExclude>**/*.min.css</cssSourceExclude> 
     </cssSourceExcludes> 
     <jsSourceIncludes> 
      <jsSourceInclude>**/*.js</jsSourceInclude> 
     </jsSourceIncludes> 
     <jsSourceExcludes> 
      <jsSourceExclude>**/*.min.js</jsSourceExclude> 
     </jsSourceExcludes> 
    </configuration> 

</plugin> 

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
     <webResources> 
      <resource> 
       <directory>${project.build.directory}/minify</directory> 
      </resource> 
     </webResources> 
    </configuration> 
</plugin> 

Struktura katalogów

enter image description here

Moja struktura regulatora

'use strict'; 

angular.module('myApp').controller('MyController', function($scope, $filter, $location, $interval, ngTableParams, $modal, $transition, myService, $timeout) { 
    ... 
}); 

błąd konsola Chrome

enter image description here

Czy samaxes minify maven plugin wsparcie Zmniejszanie kodu angularjs aplikacje czy muszę używać innych alternatyw?

Proszę pomóż mi w minimalizowaniu js i css w mojej aplikacji angularjs.

+1

za pomocą maven zbudować przedni koniec zamiast chrząkać? Podoba mi się twój styl, ty szalony synu pistoletu – atmd

+0

@atmd: Jestem nowy w angularjs i nie wiem zbyt wiele na temat chrząknięcia. Używamy programu maven do tworzenia kompilacji dla naszego kodu serwera, a ta aplikacja używa również punktu końcowego reszty Java, który jest spakowany wewnątrz 'WEB-INF> lib> [pliki jar]'.Przeszedłem przez [ten artykuł] (https://www.erianna.com/using-grunt-to-minify-and-compress-assets) tylko do sekcji "Dlaczego warto używać Grunta?" I potrzebuję tylko zminimalizować js i css, więc pomyślałem, że w tym momencie nie powinienem iść z mruczeniem tylko po to, by uśmiercić rzeczy. Proszę mnie poprawić, jeśli nadal uważasz, że muszę iść z chrząknięciem. – Ricky

+0

Nie wziąłeś zrozumiałej trasy. jeśli używasz maven'a na zapleczu, to jest dobry argument za używaniem go na interfejsie. Argumentem przemówienia jest zazwyczaj użycie narzędzia do kompilacji napisanego w języku, w którym napisane jest twoje oprogramowanie (tj. Gruntowe skrypty są napisane w js) Grunt ma wtyczki, które są bardziej skoncentrowane na interfejsie użytkownika (kompilatory, minifikatory itp.), Na przykład [minikser skoncentrowany na kącie] (https://www.npmjs.com/package/grunt-ngmin). Zgodnie z moją wiedzą z mavenem, musisz podłączyć go do jakiegoś słoja (tak jak rzeczy YUI) – atmd

Odpowiedz

4

Jesteś na dobrej drodze.

Należy pamiętać, że po minięciu kodu JavaScript kontrolera wszystkie jego argumenty funkcji również zostaną zminimalizowane, a wtryskiwacz zależności nie będzie w stanie poprawnie zidentyfikować usług.

Możliwe jest przezwyciężenie tego problemu poprzez opisanie funkcji nazwami zależności podanymi jako ciągi, które nie zostaną zminimalizowane. Można to zrobić na dwa sposoby:

(1.) Utwórz właściwość $inject na funkcji kontrolera, która przechowuje tablicę łańcuchów. Na przykład:

function MyController($scope, $filter, $location, $interval, ngTableParams, $modal, $transition, myService, $timeout) {...} 
MyController.$inject = ['$scope', '$filter', '$location', '$interval', 'ngTableParams', '$modal', '$transition', 'myService', '$timeout']; 

(2.) Użyj adnotacji wstawianej, w której zamiast podawania tej funkcji podajesz tablicę. W twoim przypadku to będzie wyglądać:

angular.module('myApp').controller('MyController', ['$scope', '$filter', '$location', '$interval', 'ngTableParams', '$modal', '$transition', 'myService', '$timeout', function($scope, $filter, $location, $interval, ngTableParams, $modal, $transition, myService, $timeout) { 
    ... 
}]); 

Aby uzyskać więcej informacji proszę sprawdzić „Uwagi na minifikacji” tego tutorial.

+0

ok Więc spróbowałem 2. podejścia i użyłem 'angular.min.js' ale dostaję' Błąd: [$ injector: unpr] http : //errors.angularjs.org/1.2.27/$injector/unpr? p0 = aProvider% 20% 3C-% 20a' błąd w konsoli chrome. Sprawdzę twoje pierwsze podejście i wrócę ponownie. – Ricky

+1

Tylko dla pewności ... Czy wyczyściłeś pamięć podręczną przeglądarki przed próbą drugiego podejścia? Uwaga boczna: powinieneś używać tego samego podejścia także podczas deklarowania dyrektyw i usług. Aby uzyskać więcej informacji, zobacz: http://errors.angularjs.org/1.2.27/$injector/unpr?p0=aProvider%20%3C-%20a – PrimosK

+0

Może to [odpowiedź] (http://stackoverflow.com/a/21787020/617996) pomoże ci znaleźć część kodu, który powoduje ten problem. – PrimosK

2

Zachowaj ostrożność, używając słów zastrzeżonych w mvn, takich jak "wtedy" i "złap".

$http.get('some.json').then(convertResponse).catch(throwError); 

może być zapisane jako:

$http.get('some.json')['then'](convertResponse)['catch'](throwError); 

Mam nadzieję, że ktoś może zapewnić lepsze rozwiązanie, to wygląda naprawdę paskudny.

Więcej o Missing name after . operator YUI Compressor for socket.io js files