Я создал полностью функционирующее довольно простое приложение 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, которые лучше справятся с проблемой, с которой я столкнулся?
Любое руководство было бы действительно здорово.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте добавить свои файлы в раздел «активы» в файле 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.
Вы, вероятно, используете что-то подобное в своем скрипте (я предполагаю, что вы не предоставили эту часть кода)
app.use(express.static(__dirname+'/uploads'));
res.sendFile(path.join(__dirname+'/uploads'));
__dirname будет неправильным, когда вы упаковываете свой .exe, избавьтесь от него везде и замените его на ./
app.use(express.static('./uploads'));
res.sendFile(path.join('./uploads'));
Что-то такое. Это сработало для меня.
Удачи!
Так что в моем проекте нет папки
assets/..илиscripts/... Я пытался использовать что-то подобное"pkg": { "uploads/**/*}верно? У меня все еще есть такая же проблема, используя это.