#javascript #node.js
#javascript #node.js
Вопрос:
У меня есть два разных файла в проекте узла, в одном из них я должен использовать файл json для извлечения массива, я использовал require. В другом мне нужно импортировать некоторые функции из модуля. Проблема в том, что импорт не работает, если у меня нет
"type" : "module"
В моем package.json, но при этом require не работает.
Я попытался изменить require для импорта с помощью файла json, но для выполнения я должен использовать
node --experimental-json-modules file.js
И мы предполагаем, что не будем использовать этот флаг при запуске.
Комментарии:
1. файл json просто содержит массив с некоторыми объектами, но если просто запустить «узел file.js » при импортированном json ошибка заключалась в . расширение json
2. Извините, я неправильно истолковал ваш вопрос; вы уже пробовали это. Однако вы должны иметь возможность просто использовать require для всего.
3. Но я не могу, когда я добавляю «type»: «module» в package.json, require просто не работает
4. Не использовать; не использовать
import
и не добавлять"type": "module"
5. Мне это нужно для импорта функций из модуля в другой файл
Ответ №1:
Вы должны выбрать require()
или import
— не оба. Когда в модуле ESM (где вы можете использовать import
), require()
не определено. Если вы хотите использовать import
для загрузки модулей, то "type": "module"
правильно настройте и используйте import
. Затем, чтобы загрузить файл JSON, все, что требуется, — это небольшая функция:
async function loadJSON(file) {
let data = await fs.promises.readFile(file);
return JSON.parse(data);
}
Или, если вы хотите сделать это синхронно:
function loadJSONSync(file) {
let data = fs.readFileSync(file);
return JSON.parse(data);
}
Который вы можете поместить в сам общий модуль, чтобы вы могли использовать его где угодно. Вы хотите. Обратите внимание, что в обеих этих функциях вам нужно будет перехватывать ошибки. С помощью асинхронной опции он возвращает обещание, и вам нужно проверить как успех, так и отклонение. Для синхронной версии вам нужно перехватывать любые исключения, которые она может выдавать.