2016-01-22 12 views
32

Ecmascript 6'da bir json dosyasına nasıl erişebilirim? şu çalışmaz: Ben bir JavaScript dosyası almaya çalışırsanız bu iyi çalışırEklemcript 6'da bir json dosyası nasıl alınır?

import config from '../config.json'

.

+1

Bunun ES6 ile ilgisi yoktur, ancak kullandığınız modül yükleyiciyle. Sözdizimi kendisi iyidir. –

+1

Bunu yapmanın en temiz yolu, 'webpack' ve' json-loader' kullanmaktır. –

cevap

36

Benim için çalışan basit bir çözüm; % 100 saf ve js kullanmak dosyaları vardı: Ben kullanıyorum

import config from '../config.js' 
+4

Bu aslında soruyu yanıtlamıyor. Örneğin, package.json'unuzu paket.js'ye dönüştüremezsiniz. JSON değil JS ithal etmek istediğiniz zamanlar vardır. – curiousdannii

10

Ne yazık ki ES6/ES2015, modül içe aktarma sözdizimi aracılığıyla JSON'u yüklemeyi desteklemiyor.

Bunu yapmanın birçok yolu vardır. İhtiyaçlarınıza bağlı olarak ya JavaScript'te dosya okuyabileceğiniz (window.FileReader tarayıcıda çalışıyorsanız bir seçenek olabilir) veya other questions (NodeJS'yi kullandığınızı varsayarak) açıklandığı gibi bazı diğer yükleyicileri kullanabilirsiniz.

IMO'nun en basit yolu muhtemelen JSON'u bir JS nesnesi olarak bir ES6 modülüne yerleştirip vermek olacaktır. Bu şekilde, ihtiyacınız olduğu yere aktarabilirsiniz.

+4

Bir Dizeye koymaya gerek yok. Sonuçta JSSS değil, JSSN deniliyor. – zeroflagL

+3

Ayrıca, torazaburo daha önce silinmiş bir cevapta açıkladı: * ES6 "modül sistemi yok"; Belirli bir yükleyici tarafından uygulanan bir API var. Herhangi bir yükleyici, JSON dosyalarının içe aktarılmasını desteklemek de dahil olmak üzere istediği her şeyi yapabilir. Örneğin, bir yükleyici içe aktarma foo'yu './dizin' dizinine/dizin.js'ye aktarma anlamında desteklemeyi seçebilir * – CodingIntrigue

7

...

config.js sonra

export default 
{ 
    // my json here... 
} 

babel + browserify ve ben Bir isim içinde JSON dosyası ./i18n/locale-en.json, çeviri ad alanı (ngTranslate ile birlikte kullanılmak üzere). JSON dosyasına bir şey (Btw mümkün değil) ihraç etmeye kalmadan

, bu sözdizimi ile içeriğinin varsayılan ithalat yapabilir: Biraz geç, ama sadece tökezledi

import translationsJSON from './i18n/locale-en'; 
0

package.json sürümüne dayalı uygulama sürümünü göndermeyi içeren web uygulamam için analitik sağlamaya çalışırken aynı sorun. aşağıdaki gibi

Yapılandırma geçerli: json-yükleyici WebPack 2+ beri çok çıkmıyor + Redux, WebPack 3.5.6

Tepki, bazı onunla işe yaramaz sonra bu yüzden, çıkarmadan sona erdi.

Aslında benim için çalışan çözüm, yalnızca getirme kullanıyordu. Bu büyük olasılıkla async yaklaşımına uyum sağlamak için bazı kod değişiklikleri zorlayacak olsa da, özellikle de getirme jöle kod çözme sunacak gerçeği göz önüne alındığında, mükemmel çalıştı.

Yani işte burada:

fetch('../../package.json') 
    .then(resp => resp.json()) 
    .then((packageJson) => { 
    console.log(packageJson.version); 
    }); 

biz burada özellikle package.json bahsediyoruz çünkü dosyası genellikle üretim yapı içinde beraber geliyor (hatta dev için olmaz, akılda tutulması mı Bu nedenle, getirme kullanıldığında ona erişmek için CopyWebpackPlugin kullanmak zorunda kalacaksınız.

İlgili konular