Для создания single executable файла в Node.js, зависимости должны быть включены в бинарник. Основные подходы:
# Установка зависимостей в node_modules
npm install --production
# Альтернатива с pnpm
pnpm install --prod
Компиляция всех зависимостей в один файл:
npx @vercel/ncc build index.js -o dist
npm install -g pkg
pkg app.js --targets node18-linux-x64 --output app.bin
Особенности работы с зависимостями:
node_modules
require()
Альтернативный упаковщик:
npm install -g nexe
nexe app.js -o app.bin
Использование fs
и path
для работы с ресурсами:
const fs = require('fs');
const path = require('path');
// Для файлов внутри executable
const data = fs.readFileSync(path.join(__dirname, 'asset.txt'));
__dirname
вместо process.cwd()
package.json
пример:
{
"name": "my-app",
"version": "1.0.0",
"pkg": {
"assets": [
"views/**/*",
"public/**/*"
],
"scripts": [
"build/**/*.js"
]
}
}
Для модулей с native-кодом:
"pkg": {
"scripts": "build/**/*.js",
"assets": "node_modules/some-native-module/**/*"
}
require()
с динамическими путями// Вместо этого:
const plugin = require(`./plugins/${name}`);
// Используйте это:
const plugins = {
one: require('./plugins/one'),
two: require('./plugins/two')
};
Работа с зависимостями в single executable приложениях требует особого подхода - тщательной подготовки зависимостей, правильной конфигурации инструментов сборки и учета ограничений. Использование pkg
или nexe
с соблюдением лучших практик позволяет создавать удобные для распространения бинарные файлы со всеми необходимыми зависимостями.