注意事項として、この記事に記載されている内容はdenoのバージョンが変わると通用しない可能性があります。
deno v1.10.2で動作確認していますが、このバージョンなら あらゆるスクリプトに適用できるか、ということも分かりません。
試してみたら動きました、という内容です。
実行する際は自己責任でお願いします。
先日公開した方法の問題点は以下です。
以下の投稿を読んだのがきっかけで、今回の試みを計画しました。
Deno1.6.0 で入った deno compile のコードを読んでみる
コンパイル後に出来上がる実行ファイルのサイズとdenoのファイルサイズからして、そうなのだろうとは思っていましたが、やはりコンパイル後の実行ファイルにはdenoが丸々入っているようです。
というか、deno.exeの後ろにコンパイル済みコードとトレーラーがくっつけられただけのような感じ。
そういう事なら、コンパイルして出来上がった実行ファイルの末尾だけを切り出しておいて、実行したい時にそのファイルをdeno.exeの後ろにくっつけて起動させれば使えるような気がします。
というわけで、上記を行うためのソースが以下。
※すべてSJIS形式で保存する必要があります。ソースファイル内で全角文字を使用しなければ、おそらくUTF-8でもエラーにはなりませんが、個人的な趣味を優先しました。
まずコンパイルします。
出来上がった実行ファイルを「bat分割.bat」にドラッグ&ドロップします。
実行ファイルの先頭側がdeno.exeと完全に一致していることがcompコマンドで確認できます。
「bat分割.bat」実行時に作成された「アプリ名.denoApp」を「bat結合.bat」にドラッグ&ドロップします。
「deno.exe」の後ろに「アプリ名.denoCode」を結合すると同時に、それが実行されます。
「bat_分割.bat」で出来上がる「denoApp」ファイルはとても小さくて良い感じです。
他のスクリプトでも動作確認しました。
空いてるportを調べる.ts
上記プログラムの「denoApp」ファイルのプロパティが以下。
webSocket接続して切れるまで待つ
- compileする前にキャッシュフォルダ内を空にしておかないと、余分なキャッシュまで含んでしまう。
- ユーザアカウント毎にキャッシュファイルのコピー作業が必要になってしまう。
以下の投稿を読んだのがきっかけで、今回の試みを計画しました。
Deno1.6.0 で入った deno compile のコードを読んでみる
コンパイル後に出来上がる実行ファイルのサイズとdenoのファイルサイズからして、そうなのだろうとは思っていましたが、やはりコンパイル後の実行ファイルにはdenoが丸々入っているようです。
というか、deno.exeの後ろにコンパイル済みコードとトレーラーがくっつけられただけのような感じ。
そういう事なら、コンパイルして出来上がった実行ファイルの末尾だけを切り出しておいて、実行したい時にそのファイルをdeno.exeの後ろにくっつけて起動させれば使えるような気がします。
というわけで、上記を行うためのソースが以下。
※すべてSJIS形式で保存する必要があります。ソースファイル内で全角文字を使用しなければ、おそらくUTF-8でもエラーにはなりませんが、個人的な趣味を優先しました。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@( | |
echo $deno = "deno.exe" | |
echo $exe = "%~1" | |
type "分割.ps1" | |
) | powershell -command - | |
comp deno.exe "%~1.deno.exe" /M | |
pause |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@( | |
echo $deno = "deno.exe" | |
echo $code = "%~1" | |
type "結合.ps1" | |
) | powershell -command - | |
"%~1.exe" | |
pause |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function Split-Content() { | |
Param( | |
[string]$PathDeno, | |
[string]$Path | |
) | |
$srcDeno = New-Object System.IO.FileInfo($PathDeno) | |
$src = New-Object System.IO.FileInfo($Path) | |
$readストリーム = $src.OpenRead() | |
$先頭サイズ = $srcDeno.Length | |
$終端サイズ = $src.Length - $先頭サイズ | |
function writeByte{ | |
Param($バイト数, $ファイル名の末尾) | |
$buf = New-Object byte[] $バイト数 | |
$バイト数 = $readストリーム.Read($buf, 0, $バイト数) | |
$writeストリーム = New-Object System.IO.FileStream(($Path + $ファイル名の末尾), 'Create') | |
$writeストリーム.Write($buf, 0, $バイト数) | |
$writeストリーム.Dispose() | |
} | |
writeByte $先頭サイズ '.deno.exe' | |
writeByte $終端サイズ '.denoApp' | |
$readストリーム.Dispose() | |
$dst = New-Object System.IO.FileInfo($Path + '.denoApp') | |
$dst.LastWriteTime = $src.LastWriteTime | |
$dst.Attributes = $src.Attributes | |
} | |
Split-Content $deno $exe |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function Split-Content() { | |
Param( | |
[string]$PathDeno, | |
[string]$PathCode | |
) | |
$src = New-Object System.IO.FileInfo($PathCode) | |
$path出力 = $PathCode+'.exe' | |
$dstFs = New-Object System.IO.FileStream($path出力, 'Create') | |
$buf = [System.IO.File]::ReadAllBytes($PathDeno) | |
$dstFs.Write($buf, 0, $buf.Length) | |
$buf = [System.IO.File]::ReadAllBytes($PathCode) | |
$dstFs.Write($buf, 0, $buf.Length) | |
$dstFs.Dispose() | |
$dst = New-Object System.IO.FileInfo($PathCode+'.exe') | |
$dst.LastWriteTime = $src.LastWriteTime | |
$dst.Attributes = $src.Attributes | |
} | |
Split-Content $deno $code |
まずコンパイルします。
出来上がった実行ファイルを「bat分割.bat」にドラッグ&ドロップします。
実行ファイルの先頭側がdeno.exeと完全に一致していることがcompコマンドで確認できます。
「bat分割.bat」実行時に作成された「アプリ名.denoApp」を「bat結合.bat」にドラッグ&ドロップします。
「deno.exe」の後ろに「アプリ名.denoCode」を結合すると同時に、それが実行されます。
「bat_分割.bat」で出来上がる「denoApp」ファイルはとても小さくて良い感じです。
他のスクリプトでも動作確認しました。
空いてるportを調べる.ts
上記プログラムの「denoApp」ファイルのプロパティが以下。
webSocket接続して切れるまで待つ
0 件のコメント:
コメントを投稿