Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Collapse
exlends
Категории
  1. Home
  2. Categories
  3. Языки программирования
  4. TypeScript
  5. Запуск Typescript в Node js без сборки и сложных конфигов

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

Scheduled Pinned Locked Moved TypeScript
3 Posts 3 Posters 71 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • JspiJ Offline
    JspiJ Offline
    Jspi
    js
    wrote on last edited by 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 Reply Last reply
    👍
    2
    • kirilljsxK Online
      kirilljsxK Online
      kirilljsx
      js
      wrote on last edited by
      #2

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

      DinozaurD 1 Reply Last reply
      1
      • kirilljsxK kirilljsx

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

        DinozaurD Offline
        DinozaurD Offline
        Dinozaur
        wrote on last edited by
        #3

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

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

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

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

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

        1 Reply Last reply
        0

        Категории

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

        Контакты

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

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

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

        • Don't have an account? Register

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups