NodeJSでローカルの実行ファイルを実行するexec
NodeJSでexecコマンドを使ってローカルにある実行ファイルを実行しようとしたのですが、うまくいかなくてドツボにはまったので備忘録として書きます。
NodeJS側のプログラムではこういうように書いていました。
main.js
const exec = require('child_process');
let commandToRun = 'some.exe';
exec(commandToRune);
Code language: JavaScript (javascript)
NodeJSの公式ドキュメントには、const { exec } = require('child_process');
と書いてありますが、exec一つだけなので、中括弧{}は不要だろうと思っていました。
しかし、実行ファイルのログを見ても、そもそもログが作られておらず、実行すらされていない状況。問題をシンプルにするため、commandToRunをnotepad.exeに変えて試してみましたが、メモ帳が立ち上がりません。main.jsにコンソールログでデバッグを掛けていたがのですが、エラーも何も出ないので迷宮入りしかけました。
中括弧は大事
結論として、requireの定義を
const {exec} = require('child_process');
Code language: JavaScript (javascript)
と中括弧を付けて定義するか、
const exec = require('child_process').exec;
Code language: JavaScript (javascript)
として、.execまで含めることでローカルの実行ファイルが無事に実行できるようになりました。
NodeJSのドキュメントを見直してみると、execはchild_process.execに含まれています。なので、中括弧を付けて分割(destructuring)代入するか、.execまで含めて代入する必要があったわけですね。
JavaScriptの中括弧については、私もよく参照しているStack Overflowでも分かりやすい回答がありました。
奥深い。。
No responses yet