Есть ли какой-либо способ использовать require и import в node

#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);
}
  

Который вы можете поместить в сам общий модуль, чтобы вы могли использовать его где угодно. Вы хотите. Обратите внимание, что в обеих этих функциях вам нужно будет перехватывать ошибки. С помощью асинхронной опции он возвращает обещание, и вам нужно проверить как успех, так и отклонение. Для синхронной версии вам нужно перехватывать любые исключения, которые она может выдавать.