Jak mogę uzyskać dostęp do pliku JSON w Ecmascript 6? Poniższe nie działa:
import config from '../config.json'
Działa to dobrze, jeśli spróbuję zaimportować plik JavaScript.
json
import
ecmascript-6
Nikita Jajodia
źródło
źródło
webpack
ijson-loader
przy jego pomocy.Odpowiedzi:
Proste obejście:
config.js
następnie...
nie pozwala na import istniejących plików .json, ale wykonuje swoje zadanie.
źródło
"postbuild": "node myscript.js"
krok w moim pliku package.json, który używa funkcji zamiany w pliku, aby zrobić to za mnie. 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()
W języku TypeScript lub przy użyciu Babel możesz zaimportować plik JSON w swoim kodzie.
Źródła: https://hackernoon.com/import-json-into-typescript-8d465beded79
źródło
Loading failed for the module with source "example.json"
; w przeglądarce Chrome pojawia się komunikat „Nie udało się załadować skryptu modułu: serwer odpowiedział typem MIME innym niż JavaScript„ application / json ”. Ścisłe sprawdzanie typu MIME jest wymuszane dla skryptów modułu zgodnie ze specyfikacją HTML”.tsc
ale tak naprawdę nie jest to, co się dzieje. Próbuję uruchomić moduły ES6 natywnie w przeglądarce (<script type="module">
), a powyższe błędy są tym, co otrzymujesz, jeśli uruchomisz tęimport
linię bezpośrednio. Proszę mnie poprawić, jeśli się mylę, a faktycznie chodziło Ci o to, że można importować z formatu JSON w rzeczywistym ES6.import
instrukcję do węzłarequire()
(spróbuj!), A drugie łącze nie mówi nic o imporcie JSON. Problem tutaj nie dotyczy parsera ani systemu modułów, jest to moduł ładujący - moduł ładujący przeglądarki nie rozwiąże importu niczego innego niż JavaScript. Pod maską zawsze musisz użyć wywołania AJAX (fetch / XHR) i przeanalizować wynik, nawet jeśli twój łańcuch narzędzi kompilacji to abstrahuje.Niestety ES6 / ES2015 nie obsługuje ładowania JSON poprzez składnię importu modułu. Ale ...
Można to zrobić na wiele sposobów. W zależności od potrzeb możesz sprawdzić, jak czytać pliki w JavaScript (
window.FileReader
może to być opcja, jeśli używasz przeglądarki) lub użyć innych programów ładujących, jak opisano w innych pytaniach (zakładając, że używasz NodeJS).Najprostszym sposobem IMO jest prawdopodobnie umieszczenie JSON jako obiektu JS w module ES6 i wyeksportowanie go. W ten sposób możesz po prostu zaimportować go tam, gdzie go potrzebujesz.
Warto również zauważyć, że jeśli używasz Webpack, importowanie plików JSON będzie działać domyślnie (od
webpack >= v2.0.0
).źródło
Używam babel + browserify i mam plik JSON w katalogu ./i18n/locale-en.json z przestrzenią nazw tłumaczeń (do użycia z ngTranslate).
Bez konieczności eksportowania czegokolwiek z pliku JSON (co przy okazji nie jest możliwe), mogłem dokonać domyślnego importu jego zawartości z następującą składnią:
źródło
Jeśli używasz węzła, możesz:
LUB
Jeszcze:
LUB
źródło
W zależności od narzędzi kompilacji i struktury danych w pliku JSON może wymagać zaimportowania pliku
default
.np. użycie w ramach
Next.js
źródło
resolveJsonModule
jesttrue
w tobietsconfig.json
.Trochę późno, ale właśnie natknąłem się na ten sam problem, próbując dostarczyć dane analityczne dla mojej aplikacji internetowej, które obejmowały wysyłanie wersji aplikacji na podstawie wersji package.json.
Konfiguracja wygląda następująco: React + Redux, Webpack 3.5.6
Moduł ładujący json nie robi zbyt wiele od czasu Webpack 2+, więc po kilku majstrowaniu przy nim skończyło się na jego usunięciu.
Rozwiązaniem, które faktycznie zadziałało, było po prostu użycie funkcji pobierania. Chociaż najprawdopodobniej wymusi to pewne zmiany w kodzie, aby dostosować się do podejścia asynchronicznego, zadziałało doskonale, zwłaszcza biorąc pod uwagę fakt, że pobieranie będzie oferować dekodowanie json w locie.
Więc oto jest:
Należy pamiętać, że ponieważ mówimy tutaj konkretnie o package.json, plik zwykle nie będzie dołączony do twojej kompilacji produkcyjnej (lub nawet dev, jeśli o to chodzi), więc będziesz musiał użyć CopyWebpackPlugin, aby mieć dostęp do podczas korzystania z funkcji pobierania.
źródło
file:///
adresów URL, a nie to, co się tutaj dzieje.W przeglądarce z funkcją pobierania (w zasadzie wszystkie teraz):
W tej chwili nie możemy
import
plików z typem MIME JSON, tylko pliki z typem MIME JavaScript. Może to być funkcja dodana w przyszłości ( oficjalna dyskusja ).W Node.js 13.2 +:
Obecnie wymaga
--experimental-json-modules
flagi , w przeciwnym razie nie jest obsługiwana domyślnie.Spróbuj biegać
i zobacz zawartość obj wyprowadzoną do konsoli.
źródło