Ошибка Javascript Неизвестный поставщик: tProvider <- t после Rails minification Angularjs
Приложение My Rails не работает после включения увеличения активов при компиляции активов. Я преобразовал контроллеры Angular, чтобы использовать нотацию скобок, и получить следующую ошибку, есть ли способ отладить это?
Скомпилированный application.js https://gist.github.com/jianbo/6665161
JS ERROR
Error: Unknown provider: tProvider <- t
at Error (<anonymous>)
at me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:21665
at Object.i [as get] (me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:20671)
at me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:21753
at i (localme:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:20671)
at n (me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:20805)
at Object.r [as instantiate] (me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:21447)
at me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:818:604
at me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:28889
at r (me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:8277) application-4f6cd4e170fc6ce5d181d869af318557.js:818
(anonymous function) application-4f6cd4e170fc6ce5d181d869af318557.js:818
(anonymous function) application-4f6cd4e170fc6ce5d181d869af318557.js:818
r.$broadcast application-4f6cd4e170fc6ce5d181d869af318557.js:818
(anonymous function) application-4f6cd4e170fc6ce5d181d869af318557.js:818
l application-4f6cd4e170fc6ce5d181d869af318557.js:818
l application-4f6cd4e170fc6ce5d181d869af318557.js:818
(anonymous function) application-4f6cd4e170fc6ce5d181d869af318557.js:818
r.$eval application-4f6cd4e170fc6ce5d181d869af318557.js:818
r.$digest application-4f6cd4e170fc6ce5d181d869af318557.js:818
r.$apply application-4f6cd4e170fc6ce5d181d869af318557.js:818
r application-4f6cd4e170fc6ce5d181d869af318557.js:818
m application-4f6cd4e170fc6ce5d181d869af318557.js:818
v.onreadystatechange application-4f6cd4e170fc6ce5d181d869af318557.js:818
Ответы
Ответ 1
Сама эта ошибка Angular говорит, что она не знает, что вводить для 't'. Это означает, что 't' должно быть миниатюрным именем для одной из ваших инъекций.
Если он работает до минимизации, но не после этого, это должно быть проблемой с чем-то, где-то не используется метод минимальной безопасности.
Я бы проверял, чтобы все, что вы делаете, было minsafe, а также что вы не пытаетесь минимизировать не-минимальную версию angular.js. Всегда используйте .min, который поставляется в пакете Angular вместо того, чтобы минимизировать ваши собственные (или если вы хотите минимизировать свои собственные, убедитесь, что это версия minsafe).
Здесь приведен пример создания контроллера minsafe. Нижеследующее не является минимальным:
angular
.module('myModule')
.controller('MyCtrl', function($scope, myService) {
//your non-minsafe controller
});
Чтобы сделать это minsafe, мы инкапсулируем вызов функции в массив, который начинается с вещей, которые мы хотим ввести, и заканчивается вызовом функции с тем же порядком аргументов:
angular
.module('myModule')
.controller('MyCtrl', ['$scope', 'myService', function($scope, myService) {
//your minsafe controller
}]);
Ответ 2
У меня такая же проблема с gem hiravgandhi/angularjs-rails
Я смог работать с миниатюрами в производстве, изменив свои настройки в config/environment/production.rb
config.assets.js_compressor = Uglifier.new(mangle: false)
Использование приложения Rails 4.0.2 с жемчугом hiravgandhi/angularjs-rails, как указано в инструкциях по установке gem.
Ответ 3
У меня была одна и та же проблема, и я узнал, что проблема не в вызове .controller, она была в .config, где она не была безопасна для минимизации.
перед
var app = angular.module('myModule', ['restangular']);
app.config(function(RestangularProvider) {
RestangularProvider.setDefaultHeaders({'Content-Type': 'application/json'});
RestangularProvider.setBaseUrl('http://myapi.com/api/v1');
});
После
var app = angular.module('myModule', ['restangular']);
app.config(['RestangularProvider', function(RestangularProvider) {
RestangularProvider.setDefaultHeaders({'Content-Type': 'application/json'});
RestangularProvider.setBaseUrl('http://myapi.com/api/v1');
}]);
Ответ 4
У меня есть аналогичная проблема с модулем angular -blockUI. Предположим, мне, возможно, придется использовать предварительно ограниченную версию этого файла в качестве отдельного загружаемого материала вместо того, чтобы включать его в пакет Web Essentials. Некоторый код, который мы получаем через беседку, не готов к сбору и минимизации вообще....