Как я могу получить доступ к json-файлу в Ecmascript 6? Следующее не работает:
import config from '../config.json'
Это прекрасно работает, если я пытаюсь импортировать файл JavaScript.
json
import
ecmascript-6
Никита Джаджодиа
источник
источник
webpack
иjson-loader
с этим.Ответы:
Простой обходной путь:
config.js
затем...
не позволяет импортировать существующие файлы .json, но выполняет работу.
источник
"postbuild": "node myscript.js"
шаг в мой файл package.json, который использует replace-in-file, чтобы сделать это для меня. 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()
В TypeScript или с помощью Babel вы можете импортировать файл json в свой код.
Ссылка: https://hackernoon.com/import-json-into-typescript-8d465beded79
источник
Loading failed for the module with source "example.json"
; в Chrome я получаю сообщение «Не удалось загрузить скрипт модуля: сервер ответил не MIME-типом JavaScript» «application / json». Для скриптов модуля в соответствии со спецификацией HTML требуется строгая проверка типов MIME ».tsc
но на самом деле это не то, что происходит. Я пытаюсь запустить модули ES6 непосредственно в браузере (<script type="module">
), и вышеописанные ошибки - это то, что вы получаете, если запускаете этуimport
строку напрямую. Пожалуйста, исправьте меня, если я ошибаюсь, и вы действительно имели в виду, что можно импортировать из JSON в реальной ES6.import
оператор на узелrequire()
(попробуйте!), А вторая ссылка ничего не говорит об импорте JSON. Проблема здесь не в парсере или модульной системе, а в загрузчике - загрузчик браузера не разрешит импорт для чего-либо другого, кроме Javascript. Изнутри вы всегда должны использовать AJAX-вызов (fetch / XHR) и анализировать результат, даже если ваш набор инструментов построения абстрагирует это.К сожалению, ES6 / ES2015 не поддерживает загрузку JSON через синтаксис импорта модуля. Но ...
Есть много способов сделать это. В зависимости от ваших потребностей вы можете посмотреть, как читать файлы в JavaScript (это
window.FileReader
может быть вариант, если вы работаете в браузере) или использовать некоторые другие загрузчики, как описано в других вопросах (при условии, что вы используете NodeJS).Самый простой способ IMO - это просто поместить JSON как объект JS в модуль ES6 и экспортировать его. Таким образом, вы можете просто импортировать его туда, где вам это нужно.
Также стоит отметить, что если вы используете Webpack, импорт файлов JSON будет работать по умолчанию (поскольку
webpack >= v2.0.0
).источник
Я использую babel + browserify, и у меня есть файл JSON в каталоге ./i18n/locale-en.json с пространством имен переводов (для использования с ngTranslate).
Без необходимости экспортировать что-либо из файла JSON (что, кстати, невозможно), я мог бы сделать импорт его содержимого по умолчанию с помощью следующего синтаксиса:
источник
Если вы используете узел, вы можете:
ИЛИ
Else:
ИЛИ
источник
В зависимости от инструментов сборки и структуры данных в файле JSON может потребоваться импорт
default
.например, использование в
Next.js
источник
resolveJsonModule
чтоtrue
в васtsconfig.json
.Немного поздно, но я наткнулся на ту же проблему, пытаясь предоставить аналитику для моего веб-приложения, которая включала отправку версии приложения на основе версии package.json.
Конфигурация выглядит следующим образом: React + Redux, Webpack 3.5.6
Начиная с Webpack 2+, json-загрузчик мало что делает, поэтому, поигравшись с ним, я удалил его.
Решение, которое действительно работало для меня, было просто использовать fetch. Хотя это, скорее всего, приведет к некоторым изменениям кода для адаптации к асинхронному подходу, он работает отлично, особенно с учетом того факта, что fetch будет предлагать декодирование json на лету.
Итак, вот оно:
Имейте в виду, что, поскольку речь идет именно о package.json, этот файл обычно не входит в комплект вашей производственной сборки (или даже в этом отношении dev), поэтому вам придется использовать CopyWebpackPlugin для доступа к это при использовании fetch.
источник
file:///
URL, а не то, что здесь происходит.В браузере с fetch (в основном все они сейчас):
В настоящее время мы не можем
import
файлы с MIME-типом JSON, только файлы с MIME-типом JavaScript. Это может быть добавлено в будущем ( официальное обсуждение ).В Node.js v13.2 +:
В настоящее время требуется
--experimental-json-modules
флаг , в противном случае он не поддерживается по умолчанию.Попробуйте запустить
и увидеть содержимое obj, выведенное на консоль.
источник