javascript - Babel'i CLI programı için nasıl kullanabilirim?
Babel kullanarak node üzerinde bazı CLI programları yazmaya çalışıyorum. Nasıl bir node CLI programında Babel kullanırım? sorusunu görmüştüm ve orada loganfsmyth şunu dedi:
İdealde, paketinizin dağıtımını yapmadan önce önceden derleme yaparsınız.
Tamam, şimdi kullanıyorum:
"scripts": {
"transpile": "babel cli.js --out-file cli.es5.js",
"prepublish": "npm run transpile",
}
Ama Babel, #!/usr/bin/env node başlığının hemen arkasına 'use strict'; satırını eklediğinde problemle karşılaştım. Örneğin, eğer benim cli.js dosyam varsa:
#!/usr/bin/env node
import pkg from './package'
console.log(pkg.version);
Bunu ben alırım:
#!/usr/bin/env node'use strict';
var _package = require('./package');
… … …
Ve bu işe yaramıyor. Çalıştırmayı denediğimde her zaman şunu alıyorum:
/usr/bin/env: node'use strict';: This file or directory does'nt exist
Bu problemi nasıl çözebilirim?
Cevap #1
@DanPrince'in çözümü tamamen kabul edilebilir ancak alternatif bir yol var
cli.js
bu dosyayı es5 olarak tut
#!/usr/bin/env node
require("./run.es5.js");
run.js
// Put the contents of your existing cli.js file here,
// but this time *without* the shebang
// ...
Betiklerinizi güncelleyin
"scripts": {
"transpile": "babel run.js > run.es5.js",
"prepublish": "npm run transpile",
}
Buradaki fikir, cli.js ara dosyasının transpile edilmesine gerek olmadığı için o dosyada shebang'inizi koruyabilmenizdir.
cli.js, sadece run.js'in Babel ile derlenmiş versiyonu olan run.es5.js'yi yükleyecektir.
Cevap #2
Yapı sürecinizin son aşaması olarak shebang eklemek için başka bir NPM betiği kullanabilirsiniz. Estetik olmayabilir ama işe yarar.
"scripts": {
"transpile": "babel cli.js --out-file es5.js",
"shebang": "echo -e '#!/usr/bin/env/node\n' $(cat es5.js) > cli.es5.js",
"prepublish": "npm run transpile && npm run shebang",
}
O zaman orijinal cli.js dosyanız şöyle olurdu
import pkg from './package'
console.log(pkg.version);
Ortaya çıkan es5.js dosyası olur
'use strict';
var _package = require('./package');
Ve son olarak, cli.es5.js olur
#!/usr/bin/env node
'use strict';
var _package = require('./package');
Bu, temiz bir senaryo ile geliştirilebilir.
"scripts": {
"transpile": "babel cli.js --out-file es5.js",
"shebang": "echo -e '#!/usr/bin/env/node\n' $(cat es5.js) > cli.es5.js",
"clean": "rm es5.js cli.es5.js",
"prepublish": "npm run clean && npm run transpile && npm run shebang",
}
Elbette, bu, bash (veya bazı alternatif uyumlu kabuklar) olan bir sistemde olmanızı gerektirir, ancak bu komutların Node ile uygulanmaları için build betiklerini yeniden yazarak ShellJS gibi bir şeyle çapraz platform yapabilirsiniz.
