Bagaimana saya bisa mengakses file json di Ecmascript 6? Berikut ini tidak berfungsi:
import config from '../config.json'
Ini berfungsi dengan baik jika saya mencoba mengimpor file JavaScript.
json
import
ecmascript-6
Nikita Jajodia
sumber
sumber
webpack
danjson-loader
dengannya.Jawaban:
Solusi sederhana:
config.js
kemudian...
tidak mengizinkan impor file .json yang ada, tetapi melakukan pekerjaan.
sumber
"postbuild": "node myscript.js"
langkah dalam file package.json saya yang menggunakan ganti-in-file untuk melakukan ini untuk saya. myscript.js const replace = require('replace-in-file'); const options = { files: '_demo/typedocs/navexReact.td.js', from: /{/, to: 'export default {', }; const convertJsonOutputToJsModule = async () => { try { const changes = await replace(options) console.log('Converted json to module in files:', changes.join(', ')); } catch (error) { console.error('Error occurred:', error); } } convertJsonOutputToJsModule()
Dalam TypeScript atau menggunakan Babel, Anda dapat mengimpor file json dalam kode Anda.
Referensi: https://hackernoon.com/import-json-into-typescript-8d465beded79
sumber
Loading failed for the module with source "example.json"
; di Chrome saya mendapatkan "Gagal memuat skrip modul: Server merespons dengan tipe MIME non-JavaScript" application / json ". Pemeriksaan tipe MIME ketat diterapkan untuk skrip modul per spesifikasi HTML."tsc
tetapi itu tidak benar-benar apa yang terjadi. Saya mencoba menjalankan modul ES6 secara native di browser (<script type="module">
) dan kesalahan di atas adalah apa yang Anda dapatkan jika Anda menjalankanimport
baris itu secara langsung. Tolong perbaiki saya jika saya salah dan Anda memang bermaksud untuk mengimpor dari JSON di ES6 yang sebenarnya.import
pernyataan ke sebuah noderequire()
tautkan (coba saja!), Dan tautan kedua tidak mengatakan apa pun tentang impor JSON. Masalahnya di sini bukan dengan parser atau sistem modul, itu adalah pemuat - pemuat peramban tidak akan menyelesaikan impor untuk hal lain selain Javascript. Di bawah tenda, Anda selalu harus menggunakan panggilan AJAX (fetch / XHR) dan mem-parsing hasilnya, bahkan jika build tool abstrak Anda.Sayangnya ES6 / ES2015 tidak mendukung memuat JSON melalui sintaks impor modul. Tapi ...
Ada banyak cara untuk melakukannya. Tergantung pada kebutuhan Anda, Anda dapat melihat cara membaca file dalam JavaScript (
window.FileReader
bisa menjadi pilihan jika Anda menjalankan di browser) atau menggunakan beberapa loader lainnya seperti yang dijelaskan dalam pertanyaan lain (dengan asumsi Anda menggunakan NodeJS).Cara paling sederhana IMO mungkin adalah dengan hanya menempatkan JSON sebagai objek JS ke dalam modul ES6 dan mengekspornya. Dengan begitu Anda bisa mengimpornya di tempat yang Anda butuhkan.
Juga patut dicatat jika Anda menggunakan Webpack, mengimpor file JSON akan berfungsi secara default (sejak
webpack >= v2.0.0
).sumber
Saya menggunakan babel + browserify dan saya memiliki file JSON di direktori ./i18n/locale-en.json dengan terjemahan namespace (untuk digunakan dengan ngTranslate).
Tanpa harus mengekspor apa pun dari file JSON (yang tidak mungkin dilakukan oleh btw), saya dapat membuat impor default kontennya dengan sintaks ini:
sumber
Jika Anda menggunakan simpul, Anda dapat:
ATAU
Lain:
ATAU
sumber
Bergantung pada perkakas bangunan Anda dan struktur data dalam file JSON, mungkin perlu mengimpor
default
.mis. penggunaan di dalam
Next.js
sumber
resolveJsonModule
adatrue
di Andatsconfig.json
.Sedikit terlambat, tetapi saya hanya menemukan masalah yang sama ketika mencoba memberikan analisis untuk aplikasi web saya yang melibatkan pengiriman versi aplikasi berdasarkan versi package.json.
Konfigurasi adalah sebagai berikut: React + Redux, Webpack 3.5.6
Json-loader tidak melakukan banyak hal sejak Webpack 2+, jadi setelah beberapa mengutak-atiknya, saya akhirnya menghapusnya.
Solusi yang benar-benar bekerja untuk saya, hanya menggunakan fetch. Sementara ini kemungkinan besar akan memberlakukan beberapa perubahan kode untuk beradaptasi dengan pendekatan async, itu bekerja dengan sempurna, terutama mengingat fakta bahwa fetch akan menawarkan json decoding on the fly.
Jadi begini:
Perlu diingat, bahwa karena kita berbicara tentang package.json khusus di sini, file tersebut biasanya tidak akan disertakan dalam build produksi Anda (atau bahkan dev dalam hal ini), jadi Anda harus menggunakan CopyWebpackPlugin untuk memiliki akses ke saat menggunakan fetch.
sumber
file:///
URL, yang tidak terjadi di sini.Di browser dengan fetch (pada dasarnya semuanya sekarang):
Saat ini, kami tidak dapat
import
file dengan tipe mime JSON, hanya file dengan tipe mime JavaScript. Mungkin fitur yang ditambahkan di masa depan ( diskusi resmi ).Dalam Node.js v13.2 +:
Saat ini membutuhkan
--experimental-json-modules
bendera , jika tidak didukung secara default.Coba jalankan
dan lihat konten obj yang dikeluarkan untuk konsol.
sumber