Angulaire.module de minification bug
Avoir le darnedest temps à essayer de comprendre pourquoi minification ne fonctionne pas.
J'ai injecté via un tableau d'objet de mes fournisseurs avant la fonction par de nombreuses suggestions sur le web, et pourtant toujours "Inconnu fournisseur de: un prestataire <- un"
Régulier:
var app = angular.module('bpwApp', ['ui.bootstrap', 'ui', 'myTabs'])
.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider){
$routeProvider.
when('/', {templateUrl: 'partials/home.jade', controller: HomeCtrl});
$locationProvider.html5Mode(true);
}])
Minifiés:
var app = angular.module('bpwApp', ['ui.bootstrap', 'ui', 'myTabs'])
.config(['$routeProvider', '$locationProvider', function(a, b){
a.
when('/', {templateUrl: 'partials/home.jade', controller: HomeCtrl});
b.html5Mode(true);
}])
Toute suggestion serait bien obligé!
- Qu'utilisez-vous pour rapetisser votre code? uglifyJS? Consultez également: github.com/btford/ngmin 😉
- J'ai utilisé ngmin, tout ce qu'il faisait était de mettre en ligne le code dans un autre espace blanc format. J'ai essayé d'utiliser express-uglify en tant que middleware mais ça ne fonctionnait pas donc j'ai essayé manuellement à l'aide en ligne uglifier. De toute façon le code a fini par le même.
- Aussi, n'est-ce pas là un manque
]
? (avant la fermeture)
) - Il y avait, j'ai oublié dans cet extrait. Il ne change pas le fait "inconnu fournisseur d'un" arrive encore 🙁
- Ok, eh bien, ce en ligne minifier avez-vous utilisé? Cela fonctionne bien avec votre code: marijnhaverbeke.nl/uglifyjs
- Il minifies le code dandily. C'est ce que j'ai utilisé. La question est une fois qu'il s'exécute, il dit qu'il n'est pas écrit de façon appropriée et ne peut pas trouver le fournisseur "a"
- laissez-nous continuer cette discussion dans le chat
- [Utilisation de la uglify et rapetisser l'ensemble][1] [1]: stackoverflow.com/a/24215002/2371560
Vous devez vous connecter pour publier un commentaire.
J'ai rencontré ce problème avant avec Grunt.js Uglify plugin.
L'une des options sont mangle
Qui, je crois, exécute des fonctions regex sur "cordes" et minifys eux.
Par exemple:
Devient:
Désactiver cette fonctionnalité n'est pas jouer gentil avec Angulaire.
Edit:
Pour être plus précis @JoshDavidMiller explique:
Uglify
mangle
seulement mangles comme les variables, ce qui est la cause de la AngularJS problème. Qui est, le problème est dans l'injection et pas de définition.function MyCtrl($scope, myService)
serait se déchire àfunction MyCtrl(a, b)
, mais la définition de service à l'intérieur d'une chaîne de caractères ne doit jamais être modifié.ng-min
avant d'exécuteruglify
résout ce problème.dist
construire qui aurait mentionné erreur de dépendance "Inconnu Fournisseur". Réglagemangle: false
résolu le problème. (note: la question était seulement un problème dans legrunt
construitdist
pas le développeur amicalapp
construire)mangle: true
vraiment mutilation "cordes"? Je suis assez sûr il ne mangles comme variables, qui est la cause de la AngularJS problème. Qui est, le problème est dans l'injection et pas de définition.function MyCtrl($scope, myService)
serait se déchire àfunction MyCtrl(a, b)
, mais la définition de service à l'intérieur d'une chaîne de caractères ne doit jamais être modifié. L'exécution deng-min
avant d'exécuteruglify
résout ce problème, non?ng-min
est maintenant dépréciée en faveur deng-annotate
Problème
De AngularJS: Les Mauvaises Parties:
Solution
Vous pouvez utiliser
ng-annoter
automatique de l'ajout d'annotations requises pour les minifying:ng-annotate
est plus rapide et plus stable quengmin
(qui est maintenant obsolète) et il y a des plugins pour de nombreux outils:grunt-ng-annoter
gulp-ng-annoter
browserify-annoter
À partir de AngularJS 1.3 il y a aussi un nouveau param dans
ngApp
appeléngStrictDi
:ngStrictDi
(quelque chose comme<div ng-app="myApp" ng-strict-di />
) et l'utilisationgulp-ng-annotate
même dans votre dans votre environnement de développement, de sorte que vous pouvez facilement traquer ces minification des bugs.J'ai eu la même erreur. Cependant, pour moi, le problème est de directives pour le contrôleur de déclaration. Vous devez faire cela à la place.
https://github.com/angular/angular.js/pull/3125
controller: function ($scope) {}
notation.mangle: false
suggéré dans d'autres réponses, parce que nous voulons toujours être en mesure de coder les noms.J'ai eu un problème similaire, à l'aide de grunt, ngmin et uglify.
J'ai couru le processus dans cet ordre: concat, ngmin, uglify
J'ai pu continuer à obtenir le $injecteur erreur angulaire jusqu'à ce que j'ai ajouté dans la uglify options de mutilation: faux - ensuite, tout s'est arrangé.
J'ai aussi essayé d'ajouter les exceptions uglify comme ceci:
Mais en vain...
Voici mon gruntFile.js pour plus de précisions:
};
AndrewM96 suggestion de
ng-min
est droit.L'alignement et de l'espace blanc matière à Uglify ainsi que Angulaires.
uglify
. Dans notre processus de fabrication nous utilisons à la fois (ng-min
avantuglify
) et toujours eu un problème avec le uglified js.J'ai eu un problème similaire. Et résolu de la façon suivante. Nous avons besoin d'exécuter une Gorgée module appelé gulp-ng-annoter avant de courir uglify.
Nous avons donc installer ce module
Alors ne le nécessitent Gulpfile.js
Et dans votre usemin tâche de faire quelque chose comme ceci
Qui a résolu pour moi.
[EDIT: correction de fautes]
mg-annotate
est toujoursng-annotate
Uglify a une option pour désactiver la déformation sur des dossiers particuliers:
https://github.com/gruntjs/grunt-contrib-uglify#reserved-identifiers
C'est très difficile à déboguer parce que beaucoup de services sont nommés de la même façon (surtout e ou a). Cela ne résoudra pas l'erreur, mais vous fournir le nom de la contestation service qui vous permet de suivre, dans le uglified de sortie, l'emplacement dans le code et, enfin, vous avez la possibilité de résoudre le problème:
Aller dans
lib/scope.js
de Uglify2 (node_modules/grunt-contrib-uglify/node_modules/uglify-js/lib/scope.js
) et remplacez la ligneavec