2015-12-10 13 views
18

Es2015'i son projede babel ile kullanmaya başladım. if koşulunda import veya export yapmayı denediğimde, bir hatam var 'import' and 'export' may only appear at the top level. Bunun için birçok durum görüyorum ve require ile iyi çalışıyor, ancak es2015 modülleriyle değil. Bu sınırlamanın bir sebebi var mı?Neden ihracat bildirimleri es2015'te en üst düzeyde olmalıdır?

+2

Es2015 modülleri eşzamanlı olarak yüklenebildiğinden belki? Yuvalanmış 'dışa aktarmaya izin vermek, bu satıra – CodingIntrigue

+0

babel-eslint adı verilene kadar dışa aktarmanın ertelenebileceği anlamına gelir. https://stackoverflow.com/questions/39158552/ignore-eslint-error-import-and-export-may-only-appear-at-the-top-level –

cevap

15

JavaScript, ES6 modüllerinde statik analiz gerçekleştirir. Bu, ithalatı veya ihracatı dinamik olarak gerçekleştiremeyeceğiniz anlamına gelir. Read section 4.2 of this article for more information:

Bir modülün yapısı (statik) derleme sırasında ithalat ve ihracat belirleyebilir statik aracı olma - Yalnızca kaynak koduna bakmak zorunda, bunu gerçekleştirmenin gerekmez.

, statik olarak incelenebilir yani makro ve tip (tartışılan olmak için bir kaynak dosyası için yeteneğine güvenmek gelecek özellikler için JavaScript hazırlamak için bunlardan bazıları bu yaklaşımın birçok nedeni vardır yukarıda belirtilen makale).

başka ilginç article on this topicsiklik bağımlılıkları ve hızlı aramaları nedenleri olarak bahseder.

______

Bir modülün bazı yuvalanmış blok içinde bir export gerçekleştirmek istiyorsanız, modül yazma ve neredeyse kesinlikle gerekli değildir olarak API'leri/iç sergilemek nasıl yeniden. Aynı şey, ES5 kodunuzda iç içe geçmiş bloklar içinde şu anda require ing modülleri iseniz de geçerlidir. Modülünüzün üst kısmındaki require/import ve neden iç içe geçirilmiş bloklar içindeki API'lerini/dahili öğelerini kullanıyor? Bu yaklaşımın en büyük avantajı, en azından okunabilirlik açısından bakıldığında, kaynağını require çağrılarına taramak zorunda kalmadan bir modülün bağımlılıklarını bilmenizdir.

+3

Sadece bu değil, aynı zamanda modül bağımlılıkları nedeniyle kavramsal olarak kaldırıldılar kodunuzdan herhangi birini çalıştırmadan önce tamamen işlenir ve bir "if" durumunda içe aktarma işlemi yürütmeyi gerektirir. – loganfsmyth

+0

@loganfsmyth Bu, :-) koymanın çok daha özlü bir yoludur. – sdgluck