Перейти к содержанию
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
Логотип бренда
Категории
  1. Главная
  2. Категории
  3. Языки программирования
  4. TypeScript
  5. Запуск Typescript в Node js без сборки и сложных конфигов

Запуск Typescript в Node js без сборки и сложных конфигов

Запланировано Прикреплена Закрыта Перенесена TypeScript
3 Сообщения 3 Постеры 41 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • JspiJ Не в сети
    JspiJ Не в сети
    Jspi
    js
    написал отредактировано Jspi
    #1

    Рассмотрим простые способы запуска TypeScript в Node.js без сложных сборок. Во всех примерах используется современный синтаксис ES-модулей.

    Бывает нужно просто написать какие-то простые скрипты или проекты, а заморачиваться со сборкой нет желания и особого смысла, но хочется использовать все возможности typescript с подсказками, типами, которые не надо держать в голове, с проверками этих типов уже в IDE.

    Стартует, для сначала инициализируем проект

    npm init -y
    npm install typescript @types/node --save-dev
    

    Конфигурация typescript

    создаем файл tsconfig.json

    # или сручную
    touch tsconfig.ts
    
    # или через команду tsc 
    # но для этого нужно глобально установить Typescript
    npm install -g typescript
    #  далее команда
    tsc --init
    

    вот минимальный конфиг файл, с описанием необходимых параметров

    {
      "compilerOptions": {
        // Современный JS без обратной совместимости
        "target": "ES2022",
        
        // Нативные ES-модули Node.js
        "module": "NodeNext",
        
        // Алгоритм разрешения модулей как в Node.js
        "moduleResolution": "NodeNext",
        
        // Совместимость между CommonJS и ES-модулями
        "esModuleInterop": true,
        
        // разрешить импорт ts файлов ( для ts-node и для нативного запуска node --experimental-strip-types)
        "allowImportingTsExtensions": true,
    
        // Максимальная строгость проверки типов
        "strict": true,
        
        // Важно: запрещаем генерацию JS-файлов!
        "noEmit": true
      },
      
      // Включаем все TS-файлы в проекте
      "include": ["**/*.ts"],
      
      // Исключаем зависимости
      "exclude": ["node_modules"]
    }
    

    Обратите внимание на следующие параметры

    • noEmit - мы не будем ничего компилировать, собирать, запускаем
    • allowImportingTsExtensions - важный параметр для запуска ts нативным способом (от этом позже) и для ts-node

    Исходный код

    Теперь напишем максимальной простой код, который просто прочитает наш package.json и покажет поле "Package name"

    index.ts:

    import { readFile } from "node:fs/promises";
    
    export async function readConfig() {
      const data = await readFile("package.json", "utf8");
      console.log("Package name:", JSON.parse(data).name);
    }
    
    

    index.ts:

    import { readConfig } from "./lib.ts";
    
    readConfig();
    
    

    Запуск через ts-node

    устанавливаем локально

    npm install ts-node --save-dev
    

    package.json

    {
      "name": "test",
      "version": "1.0.0",
      "scripts": {
        "start": "ts-node index.ts"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "description": "",
      "devDependencies": {
        "@types/node": "^24.0.0",
        "ts-node": "^10.9.2",
        "typescript": "^5.8.3"
      }
    }
    
    

    запуск

    ts-node index.ts
    
    # или через npm
    npm run start 
    

    Замечания

    • "type": "commonjs" или должен отсутствовать в package.json

    • импорт файлов только с расширением .ts import * from "./lib.ts"

    • поэтому обязательна и настройка "allowImportingTsExtensions": true

    • типы проверяется!

    • скорость запуска самая неспешная из всех вариантов

    Запуск через tsx

    устанавливаем локально

    npm install tsx --save-dev
    

    package.json

    {
      "name": "test",
      "version": "1.0.0",
      "scripts": {
        "start": "tsx index.ts"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "description": "",
      "devDependencies": {
        "@types/node": "^24.0.0",
        "tsx": "^4.19.4",
        "typescript": "^5.8.3"
      }
    }
    
    

    запуск

    tsx index.ts
    
    # или через npm
    npm run start 
    

    Замечания

    • импорт файлов с расширением .ts/.js

    • типы проверяется!

    • скорость запуска быстрее чем ts-node, но медленнее, чем node --experimental-strip-types

    Запуск нативно, через node --experimental-strip-types

    обязательно нужна версия Node.js 20.6+

    package.json

    {
      "name": "test",
      "version": "1.0.0",
      "scripts": {
        "start": "node --experimental-strip-types index.ts"
      },
      "keywords": [],
      "type": "module",
      "author": "",
      "license": "ISC",
      "description": "",
      "devDependencies": {
        "@types/node": "^24.0.0",
        "typescript": "^5.8.3"
      }
    }
    
    

    запуск

    tsx index.ts
    
    # или через npm
    npm run start 
    

    Замечания

    • "type": "module" в package.json

    • импорт файлов только с расширением .ts import * from "./lib.ts"

    • поэтому обязательна и настройка "allowImportingTsExtensions": true

    • типы НЕ проверяется!

    • самая быстрая скорость запуска

    Итого

    Метод Проверка типов Скорость Требования
    ts-node ✅ ⚠️ Средняя npm i ts-node
    tsx ✅ ⚡ Быстрая npm i tsx
    node --experimental-strip-types ❌ ⚡⚡ Очень быстрая Node.js 20.6+

    Начиная с версии Node.js 24 флаг –experimental-strip-types будет использован по умолчанию

    1 ответ Последний ответ
    👍
    2
    • kirilljsK В сети
      kirilljsK В сети
      kirilljs
      js
      написал отредактировано
      #2

      Это потрясающе! Но вопрос если отсутствует проверка типов, не будет ли риск того что скрипт где-то крякнет?

      DinozaurD 1 ответ Последний ответ
      1
      • kirilljsK kirilljs

        Это потрясающе! Но вопрос если отсутствует проверка типов, не будет ли риск того что скрипт где-то крякнет?

        DinozaurD Не в сети
        DinozaurD Не в сети
        Dinozaur
        написал отредактировано
        #3

        Пользователь @kirilljs написал в Запуск Typescript в Node js без сборки и сложных конфигов:

        Это потрясающе! Но вопрос если отсутствует проверка типов, не будет ли риск того что скрипт где-то крякнет?

        Он крякнет, но также как и ТС скрипт, т.к у тс нет рантайма, для проверки типов, для есть специальные библиотеки, типа zod.

        Если ты написал что-то в тс не правильно, то все запустится и ошибки не покажутся, но в ide линтеры должны писать о проблемах. В маленьких проектах за этим легко следить

        Короче в больших проектах я бы крайне не рекомендовал такую схему запуска

        1 ответ Последний ответ
        0

        Категории

        • Главная
        • Новости
        • Фронтенд
        • Бекенд
        • Языки программирования

        Контакты

        • Сотрудничество
        • info@rosdesk.ru
        • Наш чат
        • Наш ТГ канал

        © 2024 - 2025 RosDesk, Inc. Все права защищены.

        Политика конфиденциальности
        • Войти

        • Нет учётной записи? Зарегистрироваться

        • Войдите или зарегистрируйтесь для поиска.
        • Первое сообщение
          Последнее сообщение
        0
        • Категории
        • Последние
        • Метки
        • Популярные
        • Пользователи
        • Группы