Spec-Zone.ru › Deno 2

sea

Совместимость с Deno

Поддерживаются не все символы.

Эта функция позволяет удобно распространять приложение Node.js в системе, где Node.js не установлен.

Node.js поддерживает создание автономных исполняемых приложений, позволяя внедрять подготовленный Node.js блок данных, который может содержать объединённый скрипт, в двоичный файл node. При запуске программа проверяет, были ли внедрены какие-либо данные. Если блок данных найден, выполняется содержащийся в нём скрипт. В противном случае Node.js работает как обычно.

В настоящее время функция автономных исполняемых приложений поддерживает запуск только одного встроенного скрипта с использованием системы модулей CommonJS.

Пользователи могут создать автономное исполняемое приложение из объединённого скрипта с помощью самого двоичного файла node и любого инструмента, способного внедрять ресурсы в двоичный файл.

Ниже приведены шаги по созданию автономного исполняемого приложения с помощью одного из таких инструментов — postject:

  1. Создайте файл JavaScript:
echo 'console.log(`Hello, ${process.argv[2]}!`);' > hello.js
  1. Создайте файл конфигурации для сборки блока данных, который можно внедрить в автономное исполняемое приложение (подробности см. в Generating single executable preparation blobs):
echo '{ "main": "hello.js", "output": "sea-prep.blob" }' > sea-config.json
  1. Создайте блок данных для внедрения:
node --experimental-sea-config sea-config.json
  1. Создайте копию исполняемого файла node и назовите её по своему усмотрению:
    • В системах, отличных от Windows:
cp $(command -v node) hello
  • В Windows:
node -e "require('fs').copyFileSync(process.execPath, 'hello.exe')"

Необходимо расширение .exe. 5. Удалите подпись двоичного файла (только для macOS и Windows):

  • В macOS:
codesign --remove-signature hello
  • В Windows (необязательно): можно использовать signtool из установленного Windows SDK. Если этот шаг пропущен, проигнорируйте предупреждения postject, связанные с подписью.
signtool remove /s hello.exe
  1. Внедрите блок данных в скопированный двоичный файл, выполнив postject со следующими параметрами:
    • hello / hello.exe — имя копии исполняемого файла node, созданной на шаге 4.
    • NODE_SEA_BLOB — имя ресурса / заметки / секции в двоичном файле, где будет храниться содержимое блока данных.
    • sea-prep.blob — имя блока данных, созданного на шаге 1.
    • --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 — предохранитель, используемый проектом Node.js для определения факта внедрения данных в файл.
    • --macho-segment-name NODE_SEA (требуется только в macOS) — имя сегмента в двоичном файле, где будет храниться содержимое блока данных. Итак, необходимые команды для каждой платформы:
    • В Linux:
    npx postject hello NODE_SEA_BLOB sea-prep.blob \
        --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2
    
    • В Windows — PowerShell:
    npx postject hello.exe NODE_SEA_BLOB sea-prep.blob `
        --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2
    
    • В Windows — командная строка:
    npx postject hello.exe NODE_SEA_BLOB sea-prep.blob ^
        --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2
    
    • В macOS:
    npx postject hello NODE_SEA_BLOB sea-prep.blob \
        --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 \
        --macho-segment-name NODE_SEA
    
  2. Подпишите двоичный файл (только для macOS и Windows):
    • В macOS:
codesign --sign - hello
  • В Windows (необязательно): для этого требуется сертификат. Однако двоичный файл без подписи всё равно можно будет запустить.
signtool sign /fd SHA256 hello.exe
  1. Запустите двоичный файл:
    • В системах, отличных от Windows
$ ./hello world
Hello, world!
  • В Windows
$ .\hello.exe world
Hello, world!

Использование в Deno

import * as mod from "node:sea";

функция getAsset

Использование в Deno

import { getAsset } from "node:sea";

Перегрузка 1

getAsset(key: AssetKey): ArrayBuffer
Совместимость с Deno

Этот символ не поддерживается.

Этот метод можно использовать для получения ресурсов, настроенных для включения в автономное исполняемое приложение во время сборки. Если подходящий ресурс не найден, возникает ошибка.

Параметры

key: AssetKey

Тип возвращаемого значения

ArrayBuffer

Перегрузка 2

getAsset(
key: AssetKey,
encoding: string,
): string
Совместимость с Deno

Этот символ не поддерживается.

Параметры

key: AssetKey
encoding: string

Тип возвращаемого значения

string

функция getAssetAsBlob

Использование в Deno

import { getAssetAsBlob } from "node:sea";
getAssetAsBlob(
key: AssetKey,
options?: { type: string; },
): Blob
Совместимость с Deno

Этот символ не поддерживается.

Подобно sea.getAsset(), но возвращает результат в виде Blob. Если подходящий ресурс не найден, возникает ошибка.

Параметры

key: AssetKey
options: { type: string; }
необязательный

Тип возвращаемого значения

Blob

функция getRawAsset

Использование в Deno

import { getRawAsset } from "node:sea";
getRawAsset(key: AssetKey): ArrayBuffer
Совместимость с Deno

Этот символ не поддерживается.

Этот метод можно использовать для получения ресурсов, настроенных для включения в автономное исполняемое приложение во время сборки. Если подходящий ресурс не найден, возникает ошибка.

В отличие от sea.getRawAsset() или sea.getAssetAsBlob(), этот метод не возвращает копию. Вместо этого он возвращает исходный ресурс, встроенный в исполняемый файл.

Пока что пользователям следует избегать записи в возвращаемый буфер массива. Если внедрённая секция не помечена как доступная для записи или не выровнена должным образом, запись в возвращаемый буфер массива, скорее всего, приведёт к сбою.

Параметры

key: AssetKey

Тип возвращаемого значения

ArrayBuffer

функция isSea

Использование в Deno

import { isSea } from "node:sea";
isSea(): boolean
Совместимость с Deno

Этот символ не поддерживается.

Тип возвращаемого значения

boolean

Определяет, выполняется ли этот скрипт внутри автономного исполняемого приложения.


псевдоним типа AssetKey

Использование в Deno

import { type AssetKey } from "node:sea";
Совместимость с Deno

Этот символ не поддерживается.

Определение

string

© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/api/node/sea

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API