Ana içeriğe geç

`deno compile`, bağımsız yürütülebilir dosyalar

Bayraklar

deno install ile olduğu gibi, betiğin yürütülmesi için gereken çalışma zamanı bayrakları derleme zamanında belirtilmelidir. Bu, izin bayraklarını içerir.

deno compile --allow-read --allow-net jsr:@std/http@1.0.0/file-server

Betiğin argümanları kısmen gömülebilir.

deno compile --allow-read --allow-net jsr:@std/http@1.0.0/file-server -p 8080

./file_server --help

Çapraz Derleme

--target bayrağını kullanarak diğer platformlar için ikili dosyaları çapraz olarak derleyebilirsiniz.

# Apple Silicon için çapraz derleme
deno compile --target aarch64-apple-darwin main.ts

# Bir simge ile Windows için çapraz derleme
deno compile --target x86_64-pc-windows-msvc --icon ./icon.ico main.ts

Desteklenen Hedefler

Deno, ana platformdan bağımsız olarak tüm hedeflere çapraz derlemeyi destekler.

OSMimariHedef
Windowsx86_64x86_64-pc-windows-msvc
macOSx86_64x86_64-apple-darwin
macOSARM64aarch64-apple-darwin
Linuxx86_64x86_64-unknown-linux-gnu
LinuxARM64aarch64-unknown-linux-gnu

Simgeler

ipucu

Windows hedeflenirken --icon bayrağını kullanarak yürütülebilir dosyaya bir simge eklemek mümkündür. Simge .ico formatında olmalıdır.

deno compile --icon icon.ico main.ts

# Simge ile çapraz derleme
deno compile --target x86_64-pc-windows-msvc --icon ./icon.ico main.ts

Dinamik İçe Aktarımlar

Varsayılan olarak, statik olarak analiz edilebilen dinamik içe aktarımlar (içinde import("...") çağrı ifadesi olan dize literal içerenler) çıktı dosyasına dahil edilecektir.

// calculator.ts ve bağımlılıkları ikili dosyaya dahil edilecektir
const calculator = await import("./calculator.ts");

Ancak, statik olarak analiz edilemeyen dinamik içe aktarımlar dahil edilmeyecektir:

const specifier = condition ? "./calc.ts" : "./better_calc.ts";
const calculator = await import(specifier);

Statik olarak analiz edilemeyen dinamik içe aktarımları dahil etmek için, --include bayrağını belirtin.

deno compile --include calc.ts --include better_calc.ts main.ts

Veri Dosyalarını veya Dizinlerini Dahil Etme

Deno 2.1 itibarıyla, yürütülebilir dosyaya dosyaları veya dizinleri dahil etmek için --include bayrağını belirtebilirsiniz.

deno compile --include names.csv --include data main.ts

Daha sonra, mevcut modülün dizin yoluna göre dosyayı import.meta.dirname ile okuyun:

// main.ts
const names = Deno.readTextFileSync(import.meta.dirname + "/names.csv");
const dataFiles = Deno.readDirSync(import.meta.dirname + "/data");

// burada names ve dataFiles kullanın

Bu şu anda sadece dosya sistemindeki dosyalar için çalışır ve uzaktaki dosyalar için geçerli değildir.


İşçileri

Statik olarak analiz edilemeyen dinamik içe aktarımlar gibi, işçiler için kod, derlenmiş yürütülebilir dosyaya varsayılan olarak dahil edilmez. İşçileri dahil etmenin iki yolu vardır:

  1. İşçi kodunu dahil etmek için --include bayrağını kullanın.
deno compile --include worker.ts main.ts
  1. İşçi modülünü statik olarak analiz edilebilen bir içe aktarma ile içe aktarın.
// main.ts
import "./worker.ts";
deno compile main.ts

Kod İmzalama

macOS

Varsayılan olarak, macOS'ta, derlenen yürütülebilir dosya, codesign -s - komutunu çalıştırmanın eşdeğeridir:

$ deno compile -o main main.ts
$ codesign --verify -vv ./main

./main: disk üzerinde geçerli
./main: Belirlenmiş Gereksinimini karşılar

Yürütülebilir dosyayı kod imzalama sırasında bir imzalama kimliği belirtebilirsiniz.

codesign -s "Geliştirici Kimliği Uygulaması: Adınız" ./main

Kod imzalama ve notarizasyon hakkında daha fazla bilgi için resmi belgeleri inceleyin.

Windows

Windows'ta, derlenen yürütülebilir dosya SignTool.exe aracı kullanılarak imzalanabilir.

$ deno compile -o main.exe main.ts
$ signtool sign /fd SHA256 main.exe

Yürütülebilir Dosyalarda Mevcut Değil

  • Web Depolama API'si