2015-02-27 12 views
7

Ich versuche, Javascripts und CSS-Dateien in meiner angularjs App mit zu minimieren. Ich bin in der Lage, alle js & Css zu minimieren und eine Krieg-Datei mit Maven, aber beim Versuch, App URL zu öffnen, bekomme ich Error: [$injector:unpr] Unknown provider: aProvider <- a und meine App funktioniert nicht.Wie ordnungsgemäß Minify Maven Plugin verwenden, um js und CSS in Angularjs App zu minimieren?

Below Ich meine pom Plugin-Konfiguration

<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> 

Verzeichnisstruktur

enter image description here

Meine Reglerstruktur bietet

'use strict'; 

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

Chrome Konsolen Fehler

enter image description here

Does samaxes minify maven plugin Unterstützung Verkleinerungs AngularJS Apps oder muss ich andere Alternativen zu verwenden?

Bitte helfen Sie mir in meiner angularjs App js und CSS zu minimieren.

+1

Maven mit dem vorderen Ende bauen eher dann grunzen? Ich mag deinen Stil, du verrückter Sohn einer Pistole – atmd

+0

@atmd: Ich bin neu zu Angularjs und weiß nicht viel über Grunt. Wir haben maven verwendet, um Builds für unseren Server-Code zu erstellen, und diese App verwendet auch den Java-Rest-Endpunkt, der in 'WEB-INF> lib> [jar-Dateien]' gepackt ist.Ich ging [diesen Artikel] (https://www.erianna.com/using-grunt-to-minify-and-compress-assets) nur bis zum Abschnitt "Warum sollte ich Grunt verwenden?" Und ich brauche nur die Verkleinerung von js und css, also dachte ich mir, ich sollte nicht mit dem Grunzen gehen, nur um Dinge zu verkleinern. Bitte korrigieren Sie mich, wenn Sie immer noch denken, dass ich mit Grunzen gehen muss. – Ricky

+0

Nein, Sie haben einen verständlichen Weg eingeschlagen. Wenn Sie Maven für das Backend verwenden, gibt es ein gutes Argument dafür, es am Frontend zu verwenden. Das Argument für grunt ist im Allgemeinen, ein Build-Tool zu verwenden, das in der Sprache geschrieben ist, in der Ihre Software geschrieben ist (dh grunt-Skripte sind in js geschrieben). Grunt hat Plugins, die mehr auf das Front-End fokussiert sind (Pre-Compiler, Minifyers etc.) [winklig fokussierte Minifigur] (https://www.npmjs.com/package/grunt-ngmin). Nach meinem Wissen mit Maven müssen Sie es irgendwo an ein Glas anschließen (wie das YUI-Zeug) – atmd

Antwort

4

Sie sind auf dem richtigen Weg.

Beachten Sie, dass, wenn Sie einen JavaScript-Code eines Controllers minimieren, alle seine Funktionsargumente ebenfalls minimiert werden, und der Dependency Injector wäre nicht in der Lage, Dienste korrekt zu identifizieren.

Es ist möglich, dieses Problem zu lösen, indem Sie die Funktion mit den Namen der Abhängigkeiten annotieren, die als Strings bereitgestellt werden und nicht minimiert werden. Es gibt zwei Möglichkeiten, dies zu tun:

(1.) Erstellen Sie eine $inject Eigenschaft auf der Controller-Funktion, die ein Array von Zeichenfolgen enthält. Beispiel:

(2.) Verwenden Sie eine Inline-Annotation, bei der Sie nicht nur die Funktion bereitstellen, sondern ein Array bereitstellen. In Ihrem Fall wäre es wie folgt aussehen:

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

Für mehr Informationen bitte „Ein Hinweis auf Minifizierung“ dieses tutorial überprüfen.

+0

ok Also habe ich 2. Ansatz versucht und 'angular.min.js' verwendet, aber ich bekomme' Fehler: [$ injector: unpr] http : //errors.angularjs.org/1.2.27/$injector/unpr? p0 = aProvider% 20% 3C-% 20a' Fehler in der Chrome-Konsole. Wird Ihre erste Annäherung überprüfen und wird wieder zurückkommen. – Ricky

+1

Nur um sicher zu sein ... Haben Sie den Cache des Browsers gelöscht, bevor Sie den zweiten Ansatz ausprobieren? Randnotiz: Sie sollten denselben Ansatz auch bei der Deklaration von Anweisungen und Diensten verwenden. Für weitere Informationen siehe: http://errors.angularjs.org/1.2.27/$injector/unpr?p0=aProvider%20%3C-%20a – PrimosK

+0

Vielleicht dies [Antwort] (http://stackoverflow.com/a/21787020/617996) wird Ihnen helfen, den Teil des Codes zu finden, der dieses Problem verursacht. – PrimosK

2

Auch vorsichtig mit reservierten Wörtern in MVN, wie 'dann' und 'fangen'.

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

könnte wie folgt umgeschrieben werden:

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

Hoffentlich jemand eine bessere Lösung bieten kann, das ist wirklich böse aussieht.

Mehr auf Missing name after . operator YUI Compressor for socket.io js files

Verwandte Themen