deno compile, автономные исполняемые файлы
Использование в командной строке
deno compile [OPTIONS] [SCRIPT_ARG]...Компилирует заданный скрипт в автономный исполняемый файл.
deno compile --allow-read --allow-net jsr:@std/http/file-server
deno compile --output file_server jsr:@std/http/file-server
Любые флаги, влияющие на поведение во время выполнения, будут применены к результирующему бинарному файлу.
Это позволяет распространять приложение Deno на системы, на которых Deno не установлен. Внутри происходит создание уменьшенной версии среды выполнения Deno вместе с вашим кодом JavaScript или TypeScript.
Поддержка кросс-компиляции для различных архитектур целевых платформ обеспечивается флагом --target. При первом вызове с помощью deno будет загружен соответствующий бинарный файл и кэширован в $DENO_DIR.
Параметры проверки типов
--check
Устанавливает поведение проверки типов. По умолчанию этот подкоманда проверяет локальные модули, поэтому добавление --check избыточно. Если значение «all» указано, будут включены и удаленные модули. В качестве альтернативы можно использовать подкоманду «deno check».
--no-check
Пропуск проверки типов. Если значение «remote» указано, диагностические ошибки удаленных модулей будут игнорироваться.
Параметры управления зависимостями
--cached-only
Требуется, чтобы удаленные зависимости уже были кэшированы.
--frozen
Возвращает ошибку, если файл блокировки устарел.
--import-map
Загрузка файла карты импорта из локального файла или удаленного URL.
--lock
Проверка указанного файла блокировки. (Если значение не указано, используется по умолчанию "./deno.lock").
--no-lock
Отключение автоматического обнаружения файла блокировки.
--no-npm
Отказ от разрешения модулей npm.
--no-remote
Отказ от разрешения удаленных модулей.
--node-modules-dir
Устанавливает режим управления модулями node_modules для пакетов npm.
--reload
Короткий флаг: -r
Перезагрузка кэша исходного кода (перекомпиляция TypeScript) без значения. Перезагрузить все jsr:@std/http/file-server,jsr:@std/assert/assert-equals. Перезагружает определенные модули npm: Перезагрузить все модули npm npm:chalk Перезагрузить определенный модуль npm.
--vendor
Включает/выключает использование локальной папки vendor для удаленных модулей и папки node_modules для пакетов npm.
Параметры
--allow-scripts
Разрешение выполнения скриптов жизненного цикла npm для заданных пакетов. Примечание: скрипты будут выполняться только при использовании папки node_modules (--node-modules-dir).
--cert
Загрузка сертификата авторитета из файла в формате PEM.
--config
Короткий флаг: -c
Настройка различных аспектов deno, включая TypeScript, проверки, и форматирования кода. Обычно конфигурационный файл называется deno.json или deno.jsonc и автоматически обнаруживается; в этом случае этот флаг не требуется.
--env-file
Загрузка переменных среды из локального файла. Используется только первая переменная среды с заданным ключом. Существующие переменные среды процесса не перезаписываются, поэтому, если переменные с одинаковыми именами уже существуют в среде, их значения будут сохранены. В случае многократных объявлений одной и той же переменной среды в вашем файле .env применяется первое встреченное. Это определяется порядком файлов, которые вы передаете в качестве аргументов.
--ext
Установка типа содержимого предоставленного файла.
--location
Значение globalThis.location, используемое некоторыми веб-API.
--no-code-cache
Отключение функции кэширования кода V8.
--no-config
Отключение автоматической загрузки конфигурационного файла.
--seed
Установка значения для генератора случайных чисел.
--v8-flags
Для просмотра списка всех доступных флагов используйте --v8-flags=--help. Флаги также могут быть заданы через переменную среды DENO_V8_FLAGS. Любые флаги, заданные с помощью этого флага, добавляются после переменной среды DENO_V8_FLAGS.
Параметры компиляции
--icon
Устанавливает значок исполняемого файла в Windows (.ico).
--include
Включает дополнительный модуль или файл/папку в скомпилированный исполняемый файл. Используйте этот флаг, если динамически импортируемый модуль или основной модуль веб-воркера не загружается в исполняемом файле, или для встраивания файла или папки в исполняемый файл. Этот флаг можно передавать несколько раз, чтобы включить несколько дополнительных модулей.
--no-terminal
Скрытие терминала в Windows.
--output
Короткий флаг: -o
Выходной файл (по умолчанию $PWD/
--target
Архитектура целевой операционной системы.
Флаги
Как и при deno install, флаги среды выполнения, используемые для выполнения скрипта, должны быть указаны во время компиляции. Это включает флаги разрешений.
deno compile --allow-read --allow-net jsr:@std/http@1.0.0/file-server
Аргументы скрипта могут быть частично встроены.
deno compile --allow-read --allow-net jsr:@std/http@1.0.0/file-server -p 8080
./file_server --help
Кросс-компиляция
Вы можете выполнить кросс-компиляцию бинарных файлов для других платформ, используя флаг --target.
# Cross compile for Apple Silicon
deno compile --target aarch64-apple-darwin main.ts
# Cross compile for Windows with an icon
deno compile --target x86_64-pc-windows-msvc --icon ./icon.ico main.ts
Поддерживаемые целевые платформы
Deno поддерживает кросс-компиляцию для всех целевых платформ независимо от платформы хоста.
| ОС | Архитектура | Целевая платформа |
|---|---|---|
| Windows | x86_64 | x86_64-pc-windows-msvc |
| macOS | x86_64 | x86_64-apple-darwin |
| macOS | ARM64 | aarch64-apple-darwin |
| Linux | x86_64 | x86_64-unknown-linux-gnu |
| Linux | ARM64 | aarch64-unknown-linux-gnu |
Значки
Добавить значок к исполняемому файлу можно, используя флаг --icon при целевой платформе Windows. Значок должен быть в формате .ico.
deno compile --icon icon.ico main.ts
# Cross compilation with icon
deno compile --target x86_64-pc-windows-msvc --icon ./icon.ico main.ts
Динамические импорты
По умолчанию статически анализируемые динамические импорты (импорты, у которых строковая литерал внутри выражения вызова import("...")) будут включены в выходной файл.
// calculator.ts and its dependencies will be included in the binary
const calculator = await import("./calculator.ts");
Но нестатически анализируемые динамические импорты не будут:
const specifier = condition ? "./calc.ts" : "./better_calc.ts";
const calculator = await import(specifier);
Для включения нестатически анализируемых динамических импортов укажите флаг --include <path>.
deno compile --include calc.ts --include better_calc.ts main.ts
Включение файлов или папок данных
Начиная с Deno 2.1, вы можете включать файлы или папки в исполняемый файл, указав их с помощью флага --include <path>.
deno compile --include names.csv --include data main.ts
Затем читайте файл относительно пути к каталогу текущего модуля через import.meta.dirname:
// main.ts
const names = Deno.readTextFileSync(import.meta.dirname + "/names.csv");
const dataFiles = Deno.readDirSync(import.meta.dirname + "/data");
// use names and dataFiles here
Обратите внимание, что это в настоящее время работает только для файлов на файловой системе, а не для удаленных файлов.
Рабочие процессы
Аналогично нестатически анализируемым динамическим импортам, код для рабочих процессов по умолчанию не включается в скомпилированный исполняемый файл. Есть два способа включить рабочие процессы:
- Используйте флаг
--include <path>для включения кода рабочего процесса.
deno compile --include worker.ts main.ts
- Импортируйте модуль рабочего процесса с помощью статически анализируемого импорта.
// main.ts
import "./worker.ts";
deno compile main.ts
Подпись кода
macOS
По умолчанию на macOS скомпилированный исполняемый файл будет подписан с помощью временной подписи, что эквивалентно запуску codesign -s -:
$ deno compile -o main main.ts
$ codesign --verify -vv ./main
./main: valid on disk
./main: satisfies its Designated Requirement
Вы можете указать идентификатор подписи при подписи исполняемого файла так же, как вы бы это сделали с любым другим исполняемым файлом macOS:
codesign -s "Developer ID Application: Your Name" ./main
Для получения дополнительной информации о подписи кода и нотаризации на macOS, обратитесь к официальной документации.
Windows
В Windows скомпилированный исполняемый файл может быть подписан с помощью утилиты SignTool.exe.
$ deno compile -o main.exe main.ts
$ signtool sign /fd SHA256 main.exe
Недоступно в исполняемых файлах
© 2018–2024 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/reference/cli/compile