NodeのSingle executable applicationsをWindowsでやる
はじめに
はじめまして。Never3924です。
Single executable applicationsをWindowsでやる時にすこしつまづいたのでメモとして残しておきます
今回の記事ですが、Windows以外とかでこれができる人は断然こっちのほうがいいです。
これをWindowsでできるようにしたよ、ってだけなので。要件
Windowsであること
動作確認: 10のみ、11未確認です
本編
では、始めます。
まず、コマンドプロンプトを起動してください。
次にファイルがある改装まで移動してください。
そしたら上記のURLにある「中間ファイルを作成」まで行ってください。
そこでもしエラーが出ましたら、文字コードとかを疑ってみてください。
次のコマンドですが、以下のように変更してください。手間が少し増えます。
cp $(command -v node) hello
から
for /f "delims=" %i in ('where node') do copy "%i" hello
に変更してください。そうしたらあとは道なりに進んだら完了です。
なぜこうなったのか (解説)
cp $(command -v node) hello
から
for /f "delims=" %i in ('where node') do copy "%i" hello
になった理由ですが、まずWindowsではcp
コマンドは未対応です。そうすると
copy "$(command -v node) hello"
とできます。次にcommand
もないので同じ働きをするwhere
に変えます。
copy "$(where node)" hello
となりますが、コマンドプロンプトでは$()で展開できません。
そこでfor
が登場します。
for /f "delims=" %i in ('where node')
とやると実行結果が変数%iに格納されます。気味悪いですね。
これはどういう仕組みなのかと言うと、まずfor /f
はコマンドの出力を行ごとに処理するため('where node')
が実行され、for /f "delims=" %i in ('C:\dummyPath')
となります。
次に"delims="
、つまりパスが区切られないまま変数%i
に格納されます。
そうしたらコマンドの出力は1行しかないので、1回しか実行されません。
なのでコマンドの実行結果がそのままそっくり%i
に入り、copy "%i" hello
に実行結果が代入されてくれるってわけですね。
最後に
ふぅ、実行よりも解説のほうが長かった気がします...w
Qiitaがメンテナンスでかけなかったので初めてZennでやってみました。
ちなみにcp "$(command -v node)" hello
のWindows変換はAIにやってもらいました。
解説もAIです
私は何をしたのかって言うと特にしてないですね...
ではまた。
Discussion