Я получаю ENOENT при запуске исполняемого актива из упакованного приложения узла.
Я хочу упаковать свое приложение узла в исполняемый файл. Я использую pkg , чтобы сделать исполняемый файл. Одним из ресурсов, которые использует приложение, является другой исполняемый файл, который index.js будет запускаться с использованием child_process.exec. Я получаю ENOENT, когда я вызываю exec (...), но файл присутствует как актив. Кто-нибудь имел эту проблему?
Index.js:
const exec = require('child_process').exec;
const fs = require('fs');
const path = require('path');
fs.readdir(path.join(__dirname, 'resources'), (error, files) => {
files.forEach(file => console.log(file));
exec('./test', { cwd: path.join(__dirname, 'resources') }, (err, stdout) => {
console.log(stdout);
if (!err) {
console.log("ok");
} else {
console.log(err);
}
})
});
package.js:
{
"name": "test-exec",
"version": "1.0.0",
"main": "index.js",
"bin": {
"test": "./index.js"
},
"pkg": {
"assets": [
"resources/*"
]
}
}
Исполняемый файл "test" - это просто Hello world, закодированный вc ++ и скомпилирован с использованием g ++.
Первые строки js, которые выводят содержимое каталога «resources», выводят:
main.cpp
test
, который показывает, что исполняемый файл «test» был правильно добавлен какактив.
Однако, вызов exec выводит:
{ Error: spawn /bin/sh ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19)
at onErrorNT (internal/child_process.js:362:16)
at _combinedTickCallback (internal/process/next_tick.js:139:11)
at process._tickCallback (internal/process/next_tick.js:181:9)
errno: 'ENOENT',
code: 'ENOENT',
syscall: 'spawn /bin/sh',
path: '/bin/sh',
spawnargs: [ '-c', './test' ],
cmd: './test' }
Есть идеи, как это решить?
Запуск node index.js
Выводы:
main.cpp
test
Hello world
ok
PS: изменение exec
на execFile
или изменение './test'
на './resources/test
не работает.