node.js - TypeScript kullanarak kabuk çalıştırılabilir bir node dosyası nasıl yapılır


Normalde node dosyalarında sadece koyarım

#!/usr/bin/env node 

en üstte ve bir bash terminalinden çalıştırılabilecek bir dosya oluşturmak için çalıştırılabilir hale getirin. Ancak bunu bir Typescript dosyasında yaparsam, derleyici "hata TS1001: Beklenmeyen karakter "#"" diyor ve derlemeyi reddediyor. Peki Typescript ile nasıl bir shell çalıştırılabilir node dosyası yapabilirim?

Güncelleme: Bu düzeltildi https://github.com/Microsoft/TypeScript/issues/2749 shebang'ler artık geçiş yapıyor

Cevap #1

Bir örnek için https://github.com/Microsoft/TypeScript/blob/master/bin/tsc adresine bakın. Temelde .js uzantısına sahip olmayan sahte bir dosya oluşturun ve sadece gerçek .js dosyasını require edin.

Örn. tsc adlı dosyada:

#!/usr/bin/env node
require('./tsc.js')

Cevap #2

Hata raporunu Microsoft'a bildirmekle haklıydın ve onların bunu wontfix olarak kapatmaları yanlıştı.

Düzeltileceği zamana kadar, işte bir geçici çözüm. Aşağıdakileri bir metin dosyasına yapıştırın ve shebangify olarak kaydedin:

#!/usr/bin/env node
var fs = require('fs');
var path = process.argv[2];
var data = "#!/usr/bin/env node\n\n";
data += fs.readFileSync(path);
fs.writeFileSync(path, data);

(N.B. Bu cevabı kısa tutmak için, yukarıdaki kodda herhangi bir hata kontrolü veya başka düzenleme yoktur, bu yüzden kendi sorumluluğunuzda kullanın veya bunun yerine bunu kullanın. Ayrıca, dosyalara ekleme yapmak hakkında daha fazla bilgi için bu SO sorusuna bakın.)

Dosyayı çalıştırılabilir yapmak için, terminali kullanarak dosyanın dizinine gidin ve şu komutu çalıştırın:

chmod +x shebangify

Bir Typescript programı (ör. myscript.ts olarak adlandırılmış) oluşturduktan sonra ve bunu derleyip bir shell scriptine (ör. myscript olarak adlandırılmış) dönüştürmek istediğinizde, terminalinizde aşağıdaki gibi bir sırayı izleyerek yapabilirsiniz:

tsc --out myscript myscript.ts ; ./shebangify myscript ; chmod +x myscript

İlgili makaleler