ウェブフロント
- angular
- corewebvitals
- editorconfig
- gatsby
- hls
- html
- javascript
querySelectorAllで取得した要素は配列ではないらしい
JavaScript 配列内のオブジェクトの更新ってどうする?
デバッグ関数とかnullチェック関数をutil/index.tsにおいとけば楽なことに今頃気づいた。
ブラウザからジャイロセンサーを使ってみる
JS 画像のアップロード、プレビュー機能を実装
「数値から各桁の値を取り出す処理」って言われたら数学的な処理が一番に思い浮かぶけど、JSならそんなことなかった。
Callback時代の関数をPromise化する
個人的実装されてほしいECMA Script Proposal
JavaScriptのprototypeを使う
音声をなみなみさせる
AudioWorkletとAudioWorkletProcessorを使って音声のビジュアライゼーション
- next
- nuxt
- playwright
- prettier
- react
- reactnative
- tensorflowjs
- tools
- typescript
- wasm
- websocket
- ポエム
- 開発環境
サーバー
その他
node.jsでシェルコマンドを実行
シェルコマンドを使いたい
標準モジュールの
child_process
を使ってコマンドを実行することができます。今回はプログラムからアプリケーションの起動を実装します。
シェルコマンド
シェルコマンドでは
$ open -a ApplicationName
で任意のアプリケーションを起動できます。
プログラム
child_processモジュールのexecメソッドを使うことで、内部的にシェルを実行することができます。
callback形式の関数になっているのでpromise化して使用します。
execメソッドにコマンドを渡すとなんでも実行できてしまうので結構危険ですね。
shell injection
と言うらしい。import { exec } from "child_process";
const execAsync = (command: string): Promise<string> => {
return new Promise((resolve, reject) => {
exec(command, (error, stdout, stderr) => {
if (error) reject(error);
if (stderr) reject(stderr);
resolve(stdout);
});
});
};
(async function () {
const result = await execAsync("ls").catch(() => "");
console.log(result);
})();
resultにlsコマンドの結果が入ります。
やりたかったアプリケーションの起動は
execAsync
関数の引数を変更するだけですね。await execAsync('open -a Typora')
Typoraの起動ができます。
Thanks you for reading.