sea
Поддерживаются не все символы.
Эта функция позволяет удобно распространять приложение Node.js в системе, где Node.js не установлен.
Node.js поддерживает создание автономных исполняемых приложений, позволяя внедрять подготовленный Node.js блок данных, который может содержать объединённый скрипт, в двоичный файл node. При запуске программа проверяет, были ли внедрены какие-либо данные. Если блок данных найден, выполняется содержащийся в нём скрипт. В противном случае Node.js работает как обычно.
В настоящее время функция автономных исполняемых приложений поддерживает запуск только одного встроенного скрипта с использованием системы модулей CommonJS.
Пользователи могут создать автономное исполняемое приложение из объединённого скрипта с помощью самого двоичного файла node и любого инструмента, способного внедрять ресурсы в двоичный файл.
Ниже приведены шаги по созданию автономного исполняемого приложения с помощью одного из таких инструментов — postject:
- Создайте файл JavaScript:
echo 'console.log(`Hello, ${process.argv[2]}!`);' > hello.js
- Создайте файл конфигурации для сборки блока данных, который можно внедрить в автономное исполняемое приложение (подробности см. в
Generating single executable preparation blobs):
echo '{ "main": "hello.js", "output": "sea-prep.blob" }' > sea-config.json
- Создайте блок данных для внедрения:
node --experimental-sea-config sea-config.json
- Создайте копию исполняемого файла
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
- Внедрите блок данных в скопированный двоичный файл, выполнив
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 -
- Подпишите двоичный файл (только для macOS и Windows):
- В macOS:
codesign --sign - hello
- В Windows (необязательно): для этого требуется сертификат. Однако двоичный файл без подписи всё равно можно будет запустить.
signtool sign /fd SHA256 hello.exe
- Запустите двоичный файл:
- В системах, отличных от 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Этот символ не поддерживается.
Этот метод можно использовать для получения ресурсов, настроенных для включения в автономное исполняемое приложение во время сборки. Если подходящий ресурс не найден, возникает ошибка.
Параметры
key: AssetKey Тип возвращаемого значения
ArrayBuffer Перегрузка 2
функция getAssetAsBlob
Использование в Deno
import { getAssetAsBlob } from "node:sea";
getAssetAsBlob(
key: AssetKey,
options?: { type: string; },
): Blob
функция getRawAsset
Использование в Deno
import { getRawAsset } from "node:sea";
getRawAsset(key: AssetKey): ArrayBufferЭтот символ не поддерживается.
Этот метод можно использовать для получения ресурсов, настроенных для включения в автономное исполняемое приложение во время сборки. Если подходящий ресурс не найден, возникает ошибка.
В отличие от sea.getRawAsset() или sea.getAssetAsBlob(), этот метод не возвращает копию. Вместо этого он возвращает исходный ресурс, встроенный в исполняемый файл.
Пока что пользователям следует избегать записи в возвращаемый буфер массива. Если внедрённая секция не помечена как доступная для записи или не выровнена должным образом, запись в возвращаемый буфер массива, скорее всего, приведёт к сбою.
Параметры
key: AssetKey Тип возвращаемого значения
ArrayBuffer функция isSea
Использование в Deno
import { isSea } from "node:sea";
isSea(): booleanЭтот символ не поддерживается.
Тип возвращаемого значения
boolean Определяет, выполняется ли этот скрипт внутри автономного исполняемого приложения.
псевдоним типа AssetKey
Использование в Deno
import { type AssetKey } from "node:sea";
Этот символ не поддерживается.
Определение
string
© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/api/node/sea