<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Запуск Typescript в Node js без сборки и сложных конфигов]]></title><description><![CDATA[<p dir="auto">Рассмотрим простые способы запуска TypeScript в Node.js без сложных сборок. Во всех примерах используется современный синтаксис ES-модулей.</p>
<p dir="auto">Бывает нужно просто  написать какие-то простые скрипты или проекты, а заморачиваться со сборкой нет желания и особого смысла, но хочется использовать все  возможности typescript с подсказками, типами, которые не надо держать в голове, с проверками этих типов уже в IDE.</p>
<p dir="auto">Стартует, для сначала инициализируем проект</p>
<pre><code class="language-bash">npm init -y
npm install typescript @types/node --save-dev
</code></pre>
<h2>Конфигурация typescript</h2>
<p dir="auto">создаем  файл <code>tsconfig.json</code></p>
<pre><code class="language-bash"># или сручную
touch tsconfig.ts

# или через команду tsc 
# но для этого нужно глобально установить Typescript
npm install -g typescript
#  далее команда
tsc --init
</code></pre>
<p dir="auto">вот минимальный конфиг файл, с описанием   необходимых параметров</p>
<pre><code class="language-json">{
  "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"]
}
</code></pre>
<p dir="auto">Обратите внимание на следующие параметры</p>
<ul>
<li><strong>noEmit</strong> -  мы не будем ничего компилировать, собирать, запускаем</li>
<li><strong>allowImportingTsExtensions</strong> -  важный параметр  для запуска ts нативным  способом (от этом позже) и для <strong>ts-node</strong></li>
</ul>
<h2>Исходный код</h2>
<p dir="auto">Теперь напишем максимальной простой код, который просто прочитает наш package.json и покажет поле <code>"Package name"</code></p>
<p dir="auto"><strong>index.ts:</strong></p>
<pre><code class="language-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);
}

</code></pre>
<p dir="auto"><strong>index.ts:</strong></p>
<pre><code class="language-ts">import { readConfig } from "./lib.ts";

readConfig();

</code></pre>
<h2>Запуск через ts-node</h2>
<p dir="auto">устанавливаем локально</p>
<pre><code class="language-bash">npm install ts-node --save-dev
</code></pre>
<p dir="auto"><strong>package.json</strong></p>
<pre><code class="language-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"
  }
}

</code></pre>
<p dir="auto">запуск</p>
<pre><code class="language-sh">ts-node index.ts

# или через npm
npm run start 
</code></pre>
<h3>Замечания</h3>
<ul>
<li>
<p dir="auto"><code>"type": "commonjs"</code> или должен отсутствовать в package.json</p>
</li>
<li>
<p dir="auto">импорт файлов только с расширением .ts <code>import * from "./lib.ts"</code></p>
</li>
<li>
<p dir="auto">поэтому обязательна и настройка <code>"allowImportingTsExtensions": true</code></p>
</li>
<li>
<p dir="auto">типы проверяется!</p>
</li>
<li>
<p dir="auto">скорость запуска самая неспешная из всех вариантов</p>
</li>
</ul>
<h2>Запуск через tsx</h2>
<p dir="auto">устанавливаем локально</p>
<pre><code class="language-bash">npm install tsx --save-dev
</code></pre>
<p dir="auto"><strong>package.json</strong></p>
<pre><code class="language-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"
  }
}

</code></pre>
<p dir="auto">запуск</p>
<pre><code class="language-sh">tsx index.ts

# или через npm
npm run start 
</code></pre>
<h3>Замечания</h3>
<ul>
<li>
<p dir="auto">импорт файлов  с расширением .ts/.js</p>
</li>
<li>
<p dir="auto">типы проверяется!</p>
</li>
<li>
<p dir="auto">скорость запуска быстрее чем <strong>ts-node</strong>, но медленнее, чем <strong>node --experimental-strip-types</strong></p>
</li>
</ul>
<h2>Запуск нативно, через node --experimental-strip-types</h2>
<p dir="auto">обязательно нужна  версия <em>Node.js 20.6+</em></p>
<p dir="auto"><strong>package.json</strong></p>
<pre><code class="language-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"
  }
}

</code></pre>
<p dir="auto">запуск</p>
<pre><code class="language-sh">tsx index.ts

# или через npm
npm run start 
</code></pre>
<h3>Замечания</h3>
<ul>
<li>
<p dir="auto"><code>"type": "module"</code> в package.json</p>
</li>
<li>
<p dir="auto">импорт файлов только с расширением .ts <code>import * from "./lib.ts"</code></p>
</li>
<li>
<p dir="auto">поэтому обязательна и настройка <code>"allowImportingTsExtensions": true</code></p>
</li>
<li>
<p dir="auto">типы НЕ проверяется!</p>
</li>
<li>
<p dir="auto">самая быстрая скорость запуска</p>
</li>
</ul>
<h2>Итого</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Метод</th>
<th>Проверка типов</th>
<th>Скорость</th>
<th>Требования</th>
</tr>
</thead>
<tbody>
<tr>
<td>ts-node</td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=a1e94250dac" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/26a0.png?v=a1e94250dac" class="not-responsive emoji emoji-android emoji--warning" style="height:23px;width:auto;vertical-align:middle" title="⚠" alt="⚠" />️ Средняя</td>
<td>npm i ts-node</td>
</tr>
<tr>
<td>tsx</td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=a1e94250dac" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/26a1.png?v=a1e94250dac" class="not-responsive emoji emoji-android emoji--zap" style="height:23px;width:auto;vertical-align:middle" title="⚡" alt="⚡" /> Быстрая</td>
<td>npm i tsx</td>
</tr>
<tr>
<td>node --experimental-strip-types</td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=a1e94250dac" class="not-responsive emoji emoji-android emoji--x" style="height:23px;width:auto;vertical-align:middle" title="❌" alt="❌" /></td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/26a1.png?v=a1e94250dac" class="not-responsive emoji emoji-android emoji--zap" style="height:23px;width:auto;vertical-align:middle" title="⚡" alt="⚡" /><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/26a1.png?v=a1e94250dac" class="not-responsive emoji emoji-android emoji--zap" style="height:23px;width:auto;vertical-align:middle" title="⚡" alt="⚡" /> Очень быстрая</td>
<td>Node.js 20.6+</td>
</tr>
</tbody>
</table>
<p dir="auto">Начиная с версии Node.js 24 флаг <strong>–experimental-strip-types</strong>  будет использован по умолчанию</p>
]]></description><link>https://forum.exlends.ru/topic/145/zapusk-typescript-v-node-js-bez-sborki-i-slozhnyh-konfigov</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 02:55:59 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/145.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 Jun 2025 11:01:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Запуск Typescript в Node js без сборки и сложных конфигов on Sat, 14 Jun 2025 07:26:28 GMT]]></title><description><![CDATA[<p dir="auto">Пользователь @kirilljs написал в <a href="/post/281">Запуск Typescript в Node js без сборки и сложных конфигов</a>:</p>
<blockquote>
<p dir="auto">Это потрясающе! Но вопрос если отсутствует проверка типов, не будет ли риск того что скрипт где-то крякнет?</p>
</blockquote>
<p dir="auto">Он крякнет, но также как и ТС скрипт, т.к  у тс нет рантайма, для проверки типов, для  есть специальные библиотеки, типа zod.</p>
<p dir="auto">Если ты написал что-то в тс не правильно, то все запустится и ошибки не покажутся, но в  ide  линтеры должны писать  о проблемах. В маленьких проектах за этим легко следить</p>
<p dir="auto">Короче  в больших проектах я бы крайне не рекомендовал такую схему запуска</p>
]]></description><link>https://forum.exlends.ru/post/291</link><guid isPermaLink="true">https://forum.exlends.ru/post/291</guid><dc:creator><![CDATA[Dinozaur]]></dc:creator><pubDate>Sat, 14 Jun 2025 07:26:28 GMT</pubDate></item><item><title><![CDATA[Reply to Запуск Typescript в Node js без сборки и сложных конфигов on Tue, 10 Jun 2025 12:01:55 GMT]]></title><description><![CDATA[<p dir="auto">Это потрясающе! Но вопрос если отсутствует проверка типов, не будет ли риск того что скрипт где-то крякнет?</p>
]]></description><link>https://forum.exlends.ru/post/281</link><guid isPermaLink="true">https://forum.exlends.ru/post/281</guid><dc:creator><![CDATA[kirilljsx]]></dc:creator><pubDate>Tue, 10 Jun 2025 12:01:55 GMT</pubDate></item></channel></rss>