¿Cómo puedo acceder a un archivo json en Ecmascript 6? Lo siguiente no funciona:
import config from '../config.json'
Esto funciona bien si intento importar un archivo JavaScript.
json
import
ecmascript-6
Nikita Jajodia
fuente
fuente
webpack
yjson-loader
con él.Respuestas:
Una solución simple:
config.js
luego...
no permite la importación de archivos .json existentes, pero hace un trabajo.
fuente
"postbuild": "node myscript.js"
paso en mi archivo package.json que usa replace-in-file para hacer esto por mí. 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()
En TypeScript o usando Babel, puede importar archivos json en su código.
Referencia: https://hackernoon.com/import-json-into-typescript-8d465beded79
fuente
Loading failed for the module with source "example.json"
; en Chrome aparece "No se pudo cargar el script del módulo: el servidor respondió con un tipo MIME que no es JavaScript de" aplicación / json ". La verificación estricta del tipo MIME se aplica para los scripts del módulo según las especificaciones HTML".tsc
pero eso no es realmente lo que está sucediendo. Estoy tratando de ejecutar módulos ES6 de forma nativa en el navegador (<script type="module">
) y los errores anteriores son los que obtienes si ejecutas esaimport
línea directamente. Corríjame si me equivoco y de hecho quiere decir que es posible importar desde JSON en ES6 real.import
declaración a un nodorequire()
(¡pruébelo!), Y el segundo enlace no dice nada sobre las importaciones JSON. El problema aquí no es con el analizador o el sistema de módulos, es el cargador : el cargador del navegador no resolverá la importación de nada que no sea Javascript. Bajo el capó, siempre debe usar una llamada AJAX (fetch / XHR) y analizar el resultado, incluso si su cadena de herramientas de compilación lo abstrae.Lamentablemente, ES6 / ES2015 no admite la carga de JSON a través de la sintaxis de importación del módulo. Pero ...
Hay muchas formas de hacerlo. Dependiendo de sus necesidades, puede investigar cómo leer archivos en JavaScript (
window.FileReader
podría ser una opción si se está ejecutando en el navegador) o usar algunos otros cargadores como se describe en otras preguntas (suponiendo que esté usando NodeJS).La forma más simple de la OMI es simplemente colocar el JSON como un objeto JS en un módulo ES6 y exportarlo. De esa manera, puede importarlo donde lo necesite.
También vale la pena señalar si está utilizando Webpack, la importación de archivos JSON funcionará de forma predeterminada (desde entonces
webpack >= v2.0.0
).fuente
Estoy usando babel + browserify y tengo un archivo JSON en un directorio ./i18n/locale-en.json con espacio de nombres de traducción (para usar con ngTranslate).
Sin tener que exportar nada del archivo JSON (que por cierto no es posible), podría realizar una importación predeterminada de su contenido con esta sintaxis:
fuente
Si está utilizando el nodo, puede:
O
Más:
O
fuente
Dependiendo de las herramientas de compilación y la estructura de datos dentro del archivo JSON, puede requerir importar el archivo
default
.por ejemplo, uso dentro de
Next.js
fuente
resolveJsonModule
estátrue
en ustedtsconfig.json
.Un poco tarde, pero me encontré con el mismo problema al intentar proporcionar análisis para mi aplicación web que implicaba enviar la versión de la aplicación basada en la versión package.json.
La configuración es la siguiente: React + Redux, Webpack 3.5.6
El json-loader no está haciendo mucho desde Webpack 2+, así que después de jugar un poco, terminé quitándolo.
La solución que realmente funcionó para mí, fue simplemente usar fetch. Si bien esto probablemente impondrá algunos cambios de código para adaptarse al enfoque asíncrono, funcionó perfectamente, especialmente dado el hecho de que fetch ofrecerá decodificación json sobre la marcha.
Asi que aqui esta:
Tenga en cuenta que, dado que estamos hablando de package.json específicamente aquí, el archivo generalmente no vendrá incluido en su compilación de producción (o incluso dev para el caso), por lo que tendrá que usar CopyWebpackPlugin para tener acceso a cuando se usa fetch.
fuente
file:///
URL, que no es lo que está ocurriendo aquí.En un navegador con búsqueda (básicamente todos ahora):
Por el momento, no podemos
import
archivos con un tipo MIME JSON, solo archivos con un tipo MIME JavaScript. Podría ser una característica agregada en el futuro ( discusión oficial ).En Node.js v13.2 +:
Actualmente requiere la
--experimental-json-modules
bandera , de lo contrario no es compatible por defecto.Intenta correr
y vea el contenido obj que sale a la consola.
fuente