Как создать исполняемый файл Express API

Я создал полностью функционирующее довольно простое приложение javaScript Node.js Express API, которое я хочу запускать как исполняемый файл в среде Windows. Я хочу сделать это, чтобы дать клиентам возможность запускать мой API локально, не раскрывая им мой исходный код.

В настоящее время я использую pkg пакет npm, который позволяет мне упаковать мое приложение node.js в исполняемый файл, который будет содержать все необходимое для запуска приложения, включая узел и мой связанный исходный код.

Мой исполняемый файл запускается, но мой маршрут POST прерывается со следующей ошибкой:

    "name": "RequestError",
    "message": "Error: form-data: File or directory 'C:\\**\\myapp-api\\uploads\\1553103249524_test.wav' was not included into executable at compilation stage. Please recompile adding it as asset or script.",
    "cause": {
        "errno": -4058,
        "code": "ENOENT",
        "path": "C:\\snapshot\\myapp-api\\uploads\\test.wav",
        "pkg": true
    },
    "error": {
        "errno": -4058,
        "code": "ENOENT",
        "path": "C:\\snapshot\\myapp-api\\uploads\\1553103249524_test.wav",
        "pkg": true
    },

Мой POST позволяет клиентам загружать файл в составной форме, используя multer.js, в другой внешний API, который возвращает некоторые метаданные. pkg.js, по-видимому, не имеет средств для обнаружения файлов, включенных после сборки исполняемого файла.

Есть ли что-нибудь, что я могу сделать в своей конфигурации, чтобы мои загруженные файлы были включены? Есть ли какая-то другая утилита или процесс, который другие используют для создания исполняемого файла своих экспресс-API node.js, которые лучше справятся с проблемой, с которой я столкнулся?

Любое руководство было бы действительно здорово.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
405
2

Ответы 2

Попробуйте добавить свои файлы в раздел «активы» в файле package.json.

Параграф конфигурации на веб-сайте pkg https://www.npmjs.com/package/pkg#config гласит:

So you must specify the files - scripts and assets - manually in pkg property of your package.json file.

"pkg": {
    "scripts": "build/**/*.js",
    "assets": "views/**/*"
}

You may also specify arrays of globs:

"assets": [ "assets/**/*", "images/**/*" ]

Just be sure to call pkg package.json or pkg . to make use of scripts and assets entries.

Так что в моем проекте нет папки assets/.. или scripts/... Я пытался использовать что-то подобное "pkg": { "uploads/**/*} верно? У меня все еще есть такая же проблема, используя это.

Matthew McGuff 20.03.2019 19:56

Вы, вероятно, используете что-то подобное в своем скрипте (я предполагаю, что вы не предоставили эту часть кода)

app.use(express.static(__dirname+'/uploads'));
res.sendFile(path.join(__dirname+'/uploads'));

__dirname будет неправильным, когда вы упаковываете свой .exe, избавьтесь от него везде и замените его на ./

app.use(express.static('./uploads'));

res.sendFile(path.join('./uploads'));

Что-то такое. Это сработало для меня.

Удачи!

Другие вопросы по теме