Comment puis-je accéder à un fichier json dans Ecmascript 6? Ce qui suit ne fonctionne pas:
import config from '../config.json'
Cela fonctionne bien si j'essaye d'importer un fichier JavaScript.
json
import
ecmascript-6
Nikita Jajodia
la source
la source
webpack
etjson-loader
avec elle.Réponses:
Une solution de contournement simple:
config.js
puis...
n'autorise pas l'importation de fichiers .json existants, mais effectue un travail.
la source
"postbuild": "node myscript.js"
étape dans mon fichier package.json qui utilise replace-in-file pour le faire pour moi. 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()
Dans TypeScript ou en utilisant Babel, vous pouvez importer un fichier json dans votre code.
Référence: https://hackernoon.com/import-json-into-typescript-8d465beded79
la source
Loading failed for the module with source "example.json"
; sur Chrome, j'obtiens "Échec du chargement du script du module: le serveur a répondu avec un type MIME non JavaScript de" application / json ". Une vérification stricte du type MIME est appliquée pour les scripts de module selon les spécifications HTML."tsc
mais ce n'est pas vraiment ce qui se passe. J'essaie d'exécuter des modules ES6 de manière native sur le navigateur (<script type="module">
) et les erreurs ci-dessus sont ce que vous obtenez si vous exécutez cetteimport
ligne directement. Veuillez me corriger si je me trompe et que vous vouliez en fait dire qu'il est possible d'importer depuis JSON dans ES6 réel.import
instruction vers un nœudrequire()
(essayez-le!), Et le deuxième lien ne dit rien sur les importations JSON. Le problème ici n'est pas avec l'analyseur ou le système de modules, c'est le chargeur - le chargeur du navigateur ne résoudra pas une importation pour autre chose que Javascript. Sous le capot, vous devez toujours utiliser un appel AJAX (fetch / XHR) et analyser le résultat, même si votre chaîne d'outils de construction résume cela.Malheureusement, ES6 / ES2015 ne prend pas en charge le chargement de JSON via la syntaxe d'importation de module. Mais ...
Il y a plusieurs façons de le faire. En fonction de vos besoins, vous pouvez soit examiner comment lire des fichiers en JavaScript (cela
window.FileReader
peut être une option si vous utilisez le navigateur), soit utiliser d'autres chargeurs comme décrit dans d' autres questions (en supposant que vous utilisez NodeJS).Le moyen le plus simple de l'OMI est probablement de simplement mettre le JSON en tant qu'objet JS dans un module ES6 et de l'exporter. De cette façon, vous pouvez simplement l'importer là où vous en avez besoin.
A noter également si vous utilisez Webpack, l'importation de fichiers JSON fonctionnera par défaut (depuis
webpack >= v2.0.0
).la source
J'utilise babel + browserify et j'ai un fichier JSON dans un répertoire ./i18n/locale-en.json avec un espace de noms de traductions (à utiliser avec ngTranslate).
Sans avoir à exporter quoi que ce soit du fichier JSON (ce qui n'est pas possible au btw), je pourrais faire une importation par défaut de son contenu avec cette syntaxe:
la source
Si vous utilisez node, vous pouvez:
OU
Autre:
OU
la source
En fonction de vos outils de construction et de la structure de données dans le fichier JSON, il peut être nécessaire d'importer le fichier
default
.par exemple utilisation dans
Next.js
la source
resolveJsonModule
esttrue
en voustsconfig.json
.Un peu tard, mais je suis juste tombé sur le même problème en essayant de fournir des analyses pour mon application Web qui impliquait l'envoi de la version de l'application basée sur la version package.json.
La configuration est la suivante: React + Redux, Webpack 3.5.6
Le json-loader ne fait pas grand-chose depuis Webpack 2+, donc après quelques manipulations, j'ai fini par le supprimer.
La solution qui a fonctionné pour moi était simplement d'utiliser fetch. Bien que cela imposera très probablement des changements de code pour s'adapter à l'approche asynchrone, cela a parfaitement fonctionné, d'autant plus que fetch offrira un décodage json à la volée.
Alors voilà:
Gardez à l'esprit que, puisque nous parlons spécifiquement de package.json ici, le fichier ne sera généralement pas inclus dans votre version de production (ou même dans le développement), vous devrez donc utiliser le CopyWebpackPlugin pour avoir accès à lors de l'utilisation de fetch.
la source
file:///
URL, ce qui n'est pas ce qui se passe ici.Dans un navigateur avec fetch (pratiquement tous maintenant):
Pour le moment, nous ne pouvons pas les
import
fichiers avec un type mime JSON, uniquement les fichiers avec un type mime JavaScript. Cela pourrait être une fonctionnalité ajoutée à l'avenir ( discussion officielle ).Dans Node.js v13.2 +:
Il nécessite actuellement l'
--experimental-json-modules
indicateur , sinon il n'est pas pris en charge par défaut.Essayez de courir
et voir le contenu obj sorti sur la console.
la source