2014-10-09 66 views
14

Ich habe eine AngularJS App, an der ich gerade arbeite. Diese App hat 2 HTML-Seiten, beide enthalten einen Block in einem common.js minimiert und die anderen Seiten enthalten js für diese bestimmten Seiten minimiert.Usemin "Verschiedene Quellen, die versuchen, auf das gleiche Ziel zu schreiben"

page1.html

<!-- build:js scripts/common.js --> 
<!-- bower:js --> 
<script src="a.js"></script> 
<script src="b.js"></script> 
<!-- endbower --> 
<!-- endbuild --> 

<!-- build:js scripts/page1.js --> 
<!-- bower:js --> 
<script src="c.js"></script> 
<script src="d.js"></script> 
<!-- endbower --> 
<!-- endbuild --> 

page2.html

<!-- build:js scripts/common.js --> 
<!-- bower:js --> 
<script src="a.js"></script> 
<script src="b.js"></script> 
<!-- endbower --> 
<!-- endbuild --> 

<!-- build:js scripts/page2.js --> 
<!-- bower:js --> 
<script src="e.js"></script> 
<script src="f.js"></script> 
<!-- endbower --> 
<!-- endbuild --> 

Gruntfile.js

useminPrepare: { 
    html: ['<%= yeoman.app %>/page1.html', '<%= yeoman.app %>/page2.html'], 
     options: { 
      dest: '<%= yeoman.dist %>' 
     } 
    }, 

Usemin verärgert ist, weil common.js in beiden Dateien mit dem Fehler definiert ist: Schwerwiegender Fehler: Verschiedene Quellen versuchen, auf dasselbe Ziel zu schreiben :. Ich denke, ich muss sowohl page1 als auch page2 in useminPrepare einschließen, um page1.js und page2.js korrekt zu generieren. Wie lösen Menschen dieses Problem?

+3

Haben Sie diese Zahl aus? Ich habe das gleiche Problem. – Joao

+1

Ich habe in einer der Dateien "common.js" in "common2.js" umbenannt, weil ich weitergehen musste. Es ist keine riesige Datei, also bin ich nicht allzu besorgt, aber ich möchte immer noch eine bessere Lösung finden. – Justin

Antwort

1

Normalerweise mit eckigen Personen erstellen Sie einzelne Seite Anwendungen und erstellen Sie nur eine "Haupt" index.html für das gesamte Skelett der Seite. Auf diese Weise müssen Sie nur mit einem Satz von Dateien arbeiten. Die verschiedenen Unterseiten werden mit ui-router, ng-includes oder etwas anderem zu einem gegebenen div gerendert.

+4

Aber das ist nicht immer der Fall. Zum Beispiel erstellen wir ein White-Label-Produkt, und wir haben eine index.html-Datei für jedes Unternehmen. Es gibt subtile Änderungen in den Indexdateien, wie CSS-Dateien ... aber die js-Dateien sind im Wesentlichen die gleichen. – JobaDiniz

1

Das Problem für mich, als ich in dieses Problem lief, war, dass der Code genau das gleiche zwischen Build/Endbuild HTML-Kommentare sein muss. Scheint, dass es auf Dateinamen übereinstimmen sollte, aber es scheint auf dem Inhalt zwischen den Kommentaren übereinzustimmen. Sogar Tabs und Leerzeichen können ein Problem darstellen.

+0

Dies gilt für mich nur im Falle von Build: css –

0

WARNUNG UNGESTÖRT.

Sie könnten einen benutzerdefinierten Block erstellen, der den Block in <script src="scripts/common.js"></script> umschreibt, aber nicht versuchen würde, das Skript im usemin-Prozess zu erstellen.

options: { 
    blockReplacements: { 
     noBuild: function (block) { 
      return '<script src="scripts/common.js"></script>'; 
     } 
    } 

Dann in alle HTML-Dateien, die Sie nicht wollen, für das gemeinsame Skript zu bauen, aber Sie wollen den Pfad zu ersetzen, benutzen schreiben folgendes:

<!-- build:noBuild scripts/common.js --> 
<!-- bower:js --> 
<script src="a.js"></script> 
<script src="b.js"></script> 
<!-- endbower --> 
<!-- endbuild --> 
+0

Ich hoffe, das hat funktioniert, lass es mich wissen. –

+0

Ich habe es gerade getestet, funktioniert nicht. Ein Fehler über Uglify hat sich danach gezeigt. '>> Keine" Uglify "Ziele gefunden – darksoulsong