Avatar ·

Как запускать TypeScript файлы из командной строки: полное руководство

Привет всем! Я новичок в TypeScript и пытаюсь разобраться, как запускать свои .ts файлы из командной строки. Написал простой скрипт: ```typescript // hello.ts function greet(name: string): string { return `Привет, ${name}!`; } const message = greet("Мир"); console.log(message); ``` Когда я пытаюсь выполнить `node hello.ts`, получаю ошибку: ``` SyntaxError: Unexpected token ':' at wrapSafe (internal/modules/cjs/loader.js:988) ``` Понятно, что Node.js не понимает TypeScript напрямую. Я попробовал установить ts-node глобально и запустить `ts-node hello.ts` — это сработало. Но я слышал, что это не единственный способ. Есть ли другие варианты? Может, нужно компилировать в JavaScript? Или можно настроить Node.js, чтобы он сам понимал TypeScript? Хочу понять, какой способ считается правильным в продакшене, а какой — для разработки. Буду благодарен за подробное объяснение с примерами. Спасибо! <<>>

Основные способы запуска TypeScript из командной строки

Существует несколько подходов, и выбор зависит от ваших целей: разработка, тестирование или продакшен. Рассмотрим каждый.

1. ts-node — для разработки и быстрого тестирования

Самый простой способ — использовать ts-node. Он компилирует TypeScript "на лету" в памяти и сразу выполняет результат.

# Установка глобально
npm install -g ts-node

# Или локально в проект
npm install --save-dev ts-node

# Запуск
ts-node hello.ts

Преимущества:

  • Не требует отдельной компиляции
  • Поддерживает tsconfig.json автоматически
  • Отлично подходит для разработки

Недостатки:

  • Медленнее, чем запуск скомпилированного JS
  • Не рекомендуется для продакшена

2. Компиляция в JavaScript — для продакшена

Правильный производственный подход: сначала компилируем TypeScript в JavaScript, затем запускаем обычный Node.js.

# Установка TypeScript
npm install -g typescript

# Компиляция (создаст hello.js)
tsc hello.ts

# Запуск скомпилированного файла
node hello.js

Для проектов с tsconfig.json:

# Создаем tsconfig.json
npx tsc --init

# Компилируем весь проект
npx tsc

# Запускаем
node dist/index.js  # или ваш путь к выходному файлу

Преимущества:

  • Максимальная производительность
  • Не требует дополнительных зависимостей во время выполнения
  • Стандартный подход для продакшена

3. tsx — современная альтернатива ts-node

Более новый инструмент, который быстрее и лучше поддерживает современный TypeScript и ESM модули.

npm install -g tsx

# Запуск
tsx hello.ts

4. Настройка package.json для удобства

Добавьте скрипты в package.json:

{
  "scripts": {
    "dev": "ts-node src/index.ts",
    "build": "tsc",
    "start": "node dist/index.js",
    "start:dev": "tsx watch src/index.ts"  // с авто-перезагрузкой
  }
}

5. nodemon + ts-node — для разработки с автоперезагрузкой

npm install --save-dev nodemon ts-node

# В package.json
{
  "scripts": {
    "dev": "nodemon --exec ts-node src/index.ts"
  }
}

Что выбрать?

  • Для быстрого запуска одного файла: ts-node или tsx
  • Для разработки проекта: nodemon + ts-node или tsx watch
  • Для продакшена: tsc + node dist/...
  • Для CI/CD: компиляция через tsc, затем запуск через node

Также можно использовать ts-node --transpile-only для ускорения (без проверки типов), если вы уверены в корректности кода.

<<>>

Альтернативный подход: использование Deno или Bun

Если вы не привязаны к Node.js, рассмотрите современные рантаймы, которые поддерживают TypeScript "из коробки":

Deno

# Установка Deno
# curl -fsSL https://deno.land/install.sh | sh

# Запуск TypeScript напрямую
deno run hello.ts

Deno понимает TypeScript без дополнительных инструментов, поддерживает модули ES и имеет встроенную проверку типов.

Bun

# Установка Bun
# curl -fsSL https://bun.sh/install | bash

# Запуск
bun run hello.ts

Bun также работает с TypeScript нативно и значительно быстрее Node.js.

Когда это полезно?

  • Для новых проектов, где нет legacy-зависимостей от Node.js
  • Для быстрых прототипов и скриптов
  • Если нужна максимальная производительность (Bun)

Однако помните: в крупных проектах с кучей npm-пакетов Node.js + TypeScript всё ещё остаётся стандартом. Deno и Bun могут иметь проблемы совместимости с некоторыми библиотеками.