AngularJS : konkatenieren Pausen-Modul in der Reihenfolge der Deklaration
Ich bin mit Grunzen zu verketten meine .js
Dateien für meine Eckige app.
Habe ich gerade durchgemacht und aufgeräumt, die Codebasis zu Folgen den Konventionen diskutiert hier, insbesondere die Gruppierung der meinen code in kleine Module, die Funktionen darstellen.
Aber ich finde, dass die Reihenfolge der Verkettung erscheint, brechen Sie die app, wenn ein-Modul ist verbraucht, bevor es deklariert ist.
zB:
|-- src/
| |-- app/
| | |-- userProfile/
| | | | userProfile.js
| | | |-- deposits/
| | | | |-- depositFormCtrl.js
Wo:
//userProfile.js
var userProfile = angular.module('userProfile',[])
//depositFormCtrl.js
angular.module('userProfile')
.controller('DepositFormCtrl', function($scope) {...});
Wenn grunt führt die Verkettung depositFormCtrl.js
erscheint vor userProfile.js
. Dies bewirkt, dass die app einen Fehler auslösen, zu jammern:
Nicht abgefangener Fehler: Keine Modul: userProfile
Ich sehe viele sprechen über die Möglichkeiten der Nutzung von RequireJS /AMD zu verwalten, die lade-Reihenfolge der Module. Aber oft ist es erklärte, dass dies übertrieben ist /nicht erforderlich, wie Eckige übernimmt dies für Sie.
E. g: Brian Ford von der Winkelposition team erwähnt:
Meine persönliche Meinung ist, dass, RequireJS zu viel; das einzige Merkmal, dass AngularJS das DI-system ist wirklich fehlt, ist das asynchrone laden.
Er erklärte auch,anderswo, dass er nicht empfehlen, RequireJS mit Angular.
Ich habe auch gesehen, wie erwähnt, gemacht, um mit angular-loader.js, wie gezeigt, auf die Saatgut-Projekt. Allerdings, so wie ich es verstehe, (es gibt wenig offizielle Dokumentation) der loader soll das problem der be-Module aus, um, anstatt Sie referenziert werden, bevor Sie verwendet werden.
Hinzufügen angular-loader.js zu meinem Projekt das Problem nicht löst.
Gibt es eine Erklärung, die ich verwenden sollten, die verhindert, dass die Fehler, die ich habe?
Was ist der richtige Weg, um zu erklären, Module & Controller, so dass die Reihenfolge der Dateien verkettet hat keinerlei Einfluss auf den code zur Laufzeit?
- Dies ist genau der Grund, warum ich empfehlen, mit RequireJS mit Winkelgetriebe. RequireJS lassen Sie sich ganz einfach definieren die Ladereihenfolge aller Ihrer Skripts ein, und als die, die bei der Bereitstellung für die Produktion, verwenden Sie r.js (der RequireJS-Optimierungstool), die Ihren laden um-definition-Datei und verketten Sie die Dateien genau in der Reihenfolge, in der Sie anweisen, es zu tun. Dies ist, was ich Tue, an meinen Projekten und es funktioniert perfekt.
- Ich weiß nicht, ob dies Ihr problem behebt (es mir). Aber ich hatte zu laden app.js erste (die Datei mit der
var app
deklariert, dann könnte ich die wildcard den rest der Dateien, die mitgrunt-contrib-concat
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer Technik, die ich manchmal benutze ist Deklarationen am Beginn der Datei verkettet. Ich tun dies, indem Sie Sie in eine spezielle Datei, die wird die erste sein, die abgeholt werden müssen, durch die Verkettung Dienstprogramm.
Kann nicht eine gute Passform für alle Szenarien, aber ist einfach einzurichten und zu verstehen.
grunt-concat-contrib
?Ich lief in das gleiche Problem. Ich teilte die Verkettung Schritt in meiner GruntFile.js zwei Aufgaben, so im wesentlichen meine app.js, wo mein Winkel-Anwendung definiert ist, ist 'vorangestellt' in die temporäre Datei verkettet (_app.js), und das Ergebnis gespeichert wird, mit dem gleichen Namen der temporären Datei, die in eine endgültige "_app.js'
app.js
Sub tasks in meinem concat Abschnitt meines GruntFile.js
Den daraus resultierenden _app.js die Datei hat die Quelle app.js am Anfang d.h. die Erklärung der TestApp.
Wenn Sie teilen ein Modul in vielfachen js-Dateien, und Sie nicht wollen, zu verwalten manuell in welcher Reihenfolge Ihr bauen sollte verketten von Dateien dann werden Sie brauchen, RequireJS.
Ich persönlich versuchen zu vermeiden, Aufteilung eines Moduls in mehrere Dateien, aus mehreren Gründen :
Allerdings, wenn Sie halten die 1 Modul /1-Datei-Regel, Sie werden sehen, Ihre index.html wächst sehr schnell. Ich persönlich denke nicht, dass das so ein großes Problem.
verwenden zu schlucken, und verwenden Sie dann gulp-eckig-sortiert