Перейти к содержимому

Исполняемый файл ​

Экспериментальная функция

Опция exe находится в стадии экспериментальной разработки и может измениться в будущих релизах.

tsdown позволяет упаковать ваш код на TypeScript/JavaScript в автономный исполняемый файл с помощью Single Executable Applications в Node.js. На выходе получается нативный бинарный файл, который запускается без необходимости установки Node.js.

Требования ​

  • Node.js >= 25.7.0
  • Не поддерживается в Bun и Deno

Базовое использование ​

bash
tsdown src/cli.ts --exe

Или в конфигурационном файле:

tsdown.config.ts
ts
export default defineConfig({
  entry: ['src/cli.ts'],
  exe: true,
})

При включённой опции exe:

  • Генерация файлов объявлений (dts) отключается по умолчанию
  • Разделение кода отключается
  • Поддерживаются только единичные точки входа

Расширенная конфигурация ​

Для более тонкой настройки можно передать объект в опцию exe:

tsdown.config.ts
ts
export default defineConfig({
  entry: ['src/cli.ts'],
  exe: {
    fileName: 'my-tool',
    seaConfig: {
      disableExperimentalSEAWarning: true,
      useCodeCache: true,
    },
  },
})

fileName ​

Пользовательское имя выходного файла исполняемого файла. Не указывайте расширения .exe, суффиксы платформы или архитектуры — они добавляются автоматически.

Может быть строкой или функцией:

tsdown.config.ts
ts
export default defineConfig({
  entry: ['src/cli.ts'],
  // строка
  exe: { fileName: 'my-tool' },
  // или функция
  // exe: { fileName: (chunk) => `my-tool-${chunk.name}` },
})

seaConfig ​

Передаёт параметры непосредственно в Node.js. Полное описание см. в документации Node.js.

ОпцияТипПо умолчаниюОписание
disableExperimentalSEAWarningbooleantrueОтключить предупреждение об экспериментальном статусе
useSnapshotbooleanfalseИспользовать снапшот V8 для ускорения запуска
useCodeCachebooleanfalseИспользовать кэш кода V8 для ускорения запуска
execArgvstring[]—Дополнительные аргументы командной строки Node.js
execArgvExtension'none' | 'env' | 'cli''env'Способ расширения execArgv во время выполнения
assetsRecord<string, string>—Ресурсы для встраивания в исполняемый файл

Кроссплатформенная сборка ​

По умолчанию exe собирает исполняемый файл для текущей платформы. Чтобы собирать исполняемые файлы для нескольких платформ с одной машины, установите пакет @tsdown/exe и используйте опцию targets:

bash
pnpm add -D @tsdown/exe
bash
npm install -D @tsdown/exe
bash
yarn add -D @tsdown/exe
tsdown.config.ts
ts
export default defineConfig({
  entry: ['src/cli.ts'],
  exe: {
    targets: [
      { platform: 'linux', arch: 'x64', nodeVersion: '25.7.0' },
      { platform: 'darwin', arch: 'arm64', nodeVersion: '25.7.0' },
      { platform: 'win', arch: 'x64', nodeVersion: '25.7.0' },
    ],
  },
})

Эта конфигурация загружает бинарный файл Node.js для целевой платформы с nodejs.org, кэширует его локально и использует для сборки исполняемого файла. Выходные файлы получают суффиксы платформы и архитектуры:

build/
  cli-linux-x64
  cli-darwin-arm64
  cli-win-x64.exe

Параметры целевой платформы ​

Каждый элемент массива targets принимает следующие параметры:

ПолеТипОписание
platform'win' | 'darwin' | 'linux'Целевая операционная система (в соответствии с именами на nodejs.org)
arch'x64' | 'arm64'Целевая архитектура процессора
nodeVersionstringВерсия Node.js для использования (должна быть >=25.7.0)

WARNING

При указании targets опция seaConfig.executable игнорируется — вместо неё используется загруженный бинарный файл Node.js.

Примечание

При генерации кроссплатформенных исполняемых файлов (например, сборка для linux-x64 на машине darwin-arm64) параметры useCodeCache и useSnapshot должны быть установлены в false, чтобы избежать создания несовместимых исполняемых файлов. Поскольку кэш кода и снапшоты могут загружаться только на той же платформе, на которой они были скомпилированы, исполняемый файл может аварийно завершиться при попытке загрузки кэша или снапшота, собранного на другой платформе.

Кэширование ​

Загруженные бинарные файлы Node.js кэшируются в системной директории кэша:

  • macOS: ~/Library/Caches/tsdown/node/
  • Linux: ~/.cache/tsdown/node/ (или $XDG_CACHE_HOME/tsdown/node/)
  • Windows: %LOCALAPPDATA%/tsdown/Caches/node/

Последующие сборки повторно используют кэшированные бинарные файлы без повторной загрузки.

Особенности платформ ​

  • В macOS исполняемый файл автоматически подписывается кодом (в режиме ad-hoc) для совместимости с Gatekeeper. При кросс-компиляции для macOS с немacOS-хоста подпись кода пропускается с предупреждением.
  • В Windows расширение .exe добавляется автоматически.

Распространяется под лицензией MIT.