SORU
10 ŞUBAT 2014, PAZARTESİ


&; Bilinmeyen sağlayıcı: "aProvider < -" Nasıl orijinal sağlayıcı bulabilirim?

Benim AngularJS (UglifyJS) minified sürümü uygulama yükleme yapıyorum, konsolda aşağıdaki hatayı alıyorum

Unknown provider: aProvider <- a

Şimdi, bu değişken isim parçalama bağlı olduğunu fark ettim. Unmangled sürümü gayet güzel çalışıyor. Ancak, Benyapındeğişken adı büyük ölçüde JS çıktı dosya boyutunu küçültür gibi bozma, kullanmak istiyorum.

Bu nedenle, inşa sürecimizde ngmin kullanıyoruz, ama bizim de geçmişte görev yapmış olsa bile, bu sorunu çözmek gibi görünüyor, değil mi.

Yani, bu sorunu hata ayıklamak için uglify homurtu bizim görev kaynak haritalar etkinleştirdim. Gayet güzel ve Krom üretiliryoksunucudan haritalar yükleyin. Ama ben yine de şimdi sağlayıcı özgün adını görmem gerektiğini sanıyordum olsa bile aynı yararsızdır hata mesajı alıyorum,.

Nasıl kaynak haritalar burada sorun, bana anlatmak için kullanmak Chrome alabilirim veya, alternatif olarak, nasıl başka bir şekilde sağlayıcı bulabilirim?

CEVAP
14 ŞUBAT 2014, Cuma


Hala bu konu neden bizim kaynak kod içinde yer bulabilirdim nasıl bilmek isterdim, ama beri sorun el ile bulmak mümkün olmuştur.

Denetleyici bir işlev uygulama modülü .controller() bir telefon kullanmak yerine, küresel kapsam, ateşkes vardı.

Şöyle bir şey vardı:

function SomeController( $scope, i18n ) { /* ... */ }

Bu sadece iyi AngularJS için çalışır, ama hemen bozma ile iş yapmak için, değiştirmek zorunda kaldım:

var applicationModule = angular.module( "example" );
function SomeController( $scope, i18n ) { /* ... */ }
applicationModule.controller( "SomeController", [ "$scope", "i18n", SomeController ] );

Testler sonra, gerçekten de sorunlar nedeniyle daha fazla denetleyicileri örnekleri bulundu. Bu hepsinin kaynağını buldumel ile:

Herşeyden önce, bu oldukça önemli uglify seçenekleri çıktı güzelleştirme etkinleştirmek için düşünün. Homurtu bizim görev için gereken

options : {
    beautify : true,
    mangle   : true
}

Ben o zaman web sitesi proje DevTools açık Krom açıldı. Bir oturum altında: bir hata sonucu

enter image description here

Arama yöntemi bir ok ile işaretledim ilgileniyoruz eser, biridir. Bu providerInjector in injector.js. Bir özel durum atar bir kesme yerleştirmek isteyeceksin:

enter image description here

Yeniden çalıştırın artık ne zaman uygulama, kesme isabet olacak ve çağrı yığını atlayabilir. "Yanlış" dize: . token enjeksiyon invoke in injector.js, tanınabilir bir çağrı olacak

enter image description here

locals parametre (benim kod d ezilmiş) sorunun kaynağını nesne hakkında oldukça iyi bir fikir verir:

enter image description here

Hızlı grep kaynağımız modalInstance ama oradan gidiyor, kolay kaynağı bu nokta bulmak için birçok örneğini bulur.

var ModalCreateEditMeetingController = function( $scope, $modalInstance ) {
};

Değiştirilmesi gereken

var ModalCreateEditMeetingController = [ "$scope", "$modalInstance", function( $scope, $modalInstance ) {
} ];

Değişken yararlı bilgileri tutmak değil, aynı zamanda ek ipuçları olmalıdır yığını ve invoke çağrı vurman daha fazla geçebilirsiniz:

enter image description here

Tekrar bunu önlemek

Umarım sorunu buldum şimdi, en iyisi bir daha bunun olmasını önlemek için gelecekte nasıl söylemem gerektiğini hissediyorum.

Belli ki, sadece inline array annotation Her yerde kullanabilirsin, veya (tercihinize bağlı olarak) $inject property annotation ve sadece gelecekte bunu unutmamaya çalış. Eğer bunu yaparsanız, strict dependency injection mode, bu gibi hataları erken yakalamak için etkinleştirmek için emin olun.

Dikkat et! Açısal Batarang kullanarak ediyorsanız, StrictDİ Açısal Batarang senin (kötü Batarang!) unannotated kod enjekte olarak, sizin için işe yaramayabilir.

Yang-annotate ilgilensin. Ben çok yapıyorum, bu alanda hatalar için potansiyel bir sürü kaldırır gibi, bunun gibi tavsiye ederim

  • Dİ açıklama eksik
  • Dİ açıklama eksik
  • Dİ yanlış sırayla açıklama

Ek açıklamalar güncel tutmak sadece bir baş belası olduğunu ve otomatik olarak yapılabilir bunu yapman gerekmiyor. ng-açıklama yaptığı tam olarak bu.

Güzel grunt-ng-annotate gulp-ng-annotate ile inşa sürecine entegre.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • boniver

    boniver

    17 NİSAN 2006
  • Nickcidious

    Nickcidious

    6 HAZİRAN 2011
  • TopOfTheTech

    TopOfTheTech

    5 NİSAN 2010