Можно ли запустить скрипт node.js как модуль с помощью команды node (без использования package.json)?

Допустим, у меня есть файл code.js со следующим скриптом node.js:

const axios = require('axios')

async function getData(){
    const response = await axios.get('https://mypage.com.br')
    console.log(response.data)
}
getData()

Если я выполняю его с помощью node code.js, он работает отлично... Однако я хотел бы выполнить его как модуль, чтобы я мог использовать оператор import и использовать команду await в качестве верхнего уровня. Я хотел бы сделать это, не создавая проект с файлом package.json. Мой окончательный результат будет примерно таким:

import axios from 'axios' 

const response = await axios.get('https://mypage.com.br')
console.log(response.data)

Мне не удалось заставить его работать с командой node. Я знаю, что есть параметр --input-type=module, который я могу с ним использовать. Но я попытался запустить node --input-type=module code.js и получил следующую ошибку:

SyntaxError: Cannot use import statement outside a module

Итак, это означает, что он еще даже не распознается как модуль. Возможно ли это сделать? Могу ли я выполнить изолированный скрипт с командой node в качестве модуля (при использовании await на верхнем уровне)?

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
0
30
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Переименуйте файл в name.mjs. Этот параметр --input-type применяется только к файлам STDIN и --eval-d.

Спасибо, все заработало после переименования файла. Но я нахожусь в очень конкретном случае, когда переименование файла не является жизнеспособным решением. Нет ли способа объявить его как модуль без переименования файла?

raylight 10.04.2022 06:23

Нет.

0xLogN 10.04.2022 16:47

Это невозможно из командной строки. У вас есть только два варианта создания файла ESM.

  1. Отредактируйте package.json, чтобы получить следующие ключ и значение.

    {
      "type": "module"
    }
    
  2. Измените расширения файлов с .js на .mjs. мм> означает модуль.

В заключение, приведенный ниже флаг не помогает изменить тип на модуль.

$ node code.js --input-type=module

Из моего ответа: флаг --input-type применяется только к --eval'd или исходным файлам STDIN.

0xLogN 10.04.2022 16:59

Другие вопросы по теме