Имея ужасное время, пытаясь выяснить, почему минификация не работает.
Мне вводили через массив объект моих поставщиков до функции на многочисленные предложения в интернете и при этом еще и"неизвестное поставщик: aProvider < -"Мои
Регулярные:
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);
}])
Минимизируются:
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);
}])
Любые предложения буду очень благодарен!
Я столкнулся с этой проблемой раньше с Grunt.js уродовать плагин.
Один из вариантов мангл
uglify: {
options: {
mangle: false
},
Которые, я считаю, работает регулярное выражение функции на "струны" и minifys их.
Например:
angular.module("imgur", ["imgur.global","imgur.album"]);
Станет:
angular.module("a", ["a.global","a.album"]);
Отключить его --- эта функция не'т играть с углового.
Чтобы быть более точным, как @JoshDavidMiller объясняет:
Только корежит уродовать корежить
как переменные, что на самом деле вызывает проблемы в AngularJS. То есть, проблема в впрыске, а не определение.
MyCtrl функция($охвата, MyService с) быстро исковеркали до MyCtrl функция(А, B)
, но определение услуги в строке не должно измениться.
НГ-мин
перед уродовать
решает эту проблему.Проблема # От в AngularJS: плохие части:
угловая имеет встроенную зависимость шприц, который пройдет соответствующие объекты для своей функции на основе имен его параметры:
функция MyController($объем, $окне) { // ... }
вот имена параметров
$охват
и `$окно будет В соответствием со списком известных имен, и соответствующие предметы создан и передан в функцию. Угловой получает параметр имена путем вызова метода toString () на функцию, а затем разбора определение функции.проблема, конечно, заключается в том, что он перестает работать В момент, когда вы сократите свой код. Поскольку вы заботитесь о пользователях У вас будет сокращение кода, таким образом, используя этот механизм Ди сломать ваше приложение. На самом деле, единой методики разработки заключается в использовании код unminified в развитии для облегчения отладки, а затем сократите код при нажатии на рабочей или промежуточной. В этом случае проблема не поднять свою уродливую голову, пока вы находитесь в точке, где он больнее всего.
(...)
так как этот механизм внедрения зависимостей на самом деле не работает в В общем случае, угловые также обеспечивает механизм, который делает. Чтобы быть уверенным, Это обеспечивает два. Вы можете либо передать массив вот так:
модуль.контроллер('MyController', ['$область', '$окно', MyController]);
и GT; или вы можете установить свойство `$впрыснуть на ваш конструктор:
MyController.$впрыснуть = ['$область', '$окно'];
Решение №
Вы можете использовать НГ-аннотировать
для автоматического добавления аннотаций, необходимых для сокращение:
`НГ-комментировать-добавляет и удаляет инъекции зависимостей в AngularJS Примечания. Она ненавязчивая, поэтому ваш исходный код остается то же самое иначе. Не потеряли комментариях или переехали линий.
НГ-аннотирование-это быстрее и стабильнее, чем [
ngmin`](https://github.com/btford/ngmin) (который является теперь устаревшим) и имеет плагины для многих инструментов:
Начиная с в AngularJS 1.3 там's также новый параметр в ngApp
называют ngStrictDi
:
если этот атрибут присутствует в App элемент, инжектор будет созданы в "строгий-Ди" в режиме. Это означает, что приложение будет выполнена , чтобы вызывать функции, которые не используют явных функция аннотирования (и таким образом, непригодными для минификации), как описано в зависимости руководство по впрыск, и полезную отладочную информацию поможет в отслеживании вниз корень этих ошибок.
Я получил ту же ошибку. Однако, для меня, проблема директив' заявление регулятора. Вы должны вместо этого.
myModule.directive('directiveName', function factory(injectables) {
var directiveDefinitionObject = {
templateUrl: 'directive.html',
replace: false,
restrict: 'A',
controller: ["$scope", "$element", "$attrs", "$transclude", "otherInjectables",
function($scope, $element, $attrs, $transclude, otherInjectables) { ... }]
};
return directiveDefinitionObject;
});
У меня была аналогичная проблема, используя хрюканье, ngmin и уродовать.
Я запустил процесс в таком порядке: конкатенацию, ngmin, уродовать
Я продолжал получать ошибку $инжектор от углового до Я добавил уродовать калечить вариантов: лже - потом все было исправлено.
Я также попытался добавить в исключения уродовать такой:
options: {
mangle: {
except: ['jQuery', 'angular']
}
}
Но безрезультатно...
Вот мой gruntFile.js для дальнейшего уточнения:
module.exports = function(grunt) {
'use strict';
// Configuration goes here
grunt.initConfig({
pkg: require('./package.json'),
watch: {
files: ['scripts/**/*.js', 'test/**/*spec.js', 'GruntFile.js'],
tasks: ['test', 'ngmin']
},
jasmine : {
// Your project's source files
src : ['bower_components/angular/angular.js', 'bower_components/angular-mocks/angular-mocks.js', 'scripts/app.js', 'scripts/**/*.js' ],
// Your Jasmine spec files
options : {
specs : 'test/**/*spec.js',
helpers: 'test/lib/*.js'
}
},
concat: {
dist : {
src: ['scripts/app.js', 'scripts/**/*.js'],
dest: 'production/js/concat.js'
}
},
ngmin: {
angular: {
src : ['production/js/concat.js'],
dest : 'production/js/ngmin.js'
}
},
uglify : {
options: {
report: 'min',
mangle: false
},
my_target : {
files : {
'production/app/app.min.js' : ['production/js/ngmin.js']
}
}
},
docular : {
groups: [],
showDocularDocs: false,
showAngularDocs: false
}
});
// Load plugins here
grunt.loadNpmTasks('grunt-ngmin');
grunt.loadNpmTasks('grunt-docular');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-jasmine');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-connect');
// Define your tasks here
grunt.registerTask('test', ['jasmine']);
grunt.registerTask('build', ['concat', 'ngmin', 'uglify']);
grunt.registerTask('default', ['test', 'build', 'watch']);
};
Предложение AndrewM96 из НГ-мин-это правильно.
Выравнивание и пробелы вопросам уродовать, а также угловые.
У меня была похожая проблема. И решил ее следующим образом. Нам нужно запустить модуль залпом залпом под названием-НГ-комментировать пока мы не уродовать. Так мы устанавливаем, что модуль
npm install gulp-ng-annotate --save-dev
Тогда действительно нуждаются в Gulpfile.js
ngannotate = require(‘gulp-ng-annotate’)
И в вашу задачу usemin сделать что-то подобное
js: [ngannotate(), uglify(),rev()]
Что решена она для меня.
[Правка: исправлены опечатки]
Уродовать имеет возможность отключить коверкая на отдельные файлы:
options: {
mangle: {
except: ['jQuery', 'angular']
}
}
https://github.com/gruntjs/grunt-contrib-uglify#reserved-identifiers
Это очень трудно отлаживать, потому что многие сервисы называются (в основном E или A). Это не устраняет ошибку, но будет предоставляет информацию о названии нерешенных услуги, которая позволяет отследить, в uglified выход, места в коде, и, наконец, позволяет решить эту проблему:
Перейти в lib/scope.js из Uglify2 (node_modules/grunt-contrib-uglify/node_modules/uglify-js/lib/scope.js
) и замените строку
this.mangled_name = this.scope.next_mangled(options);
с
this.mangled_name = this.name + "__debugging_" + counter++