6 Nisan 2019 Cumartesi

Firebase Cloud Functions Parsing error



Geliştirdiğim mobil uygulamanın kendine ait bir API'ı yok şuanda maalesef, başka bir uygulamanın API'ını kullanıyorum. Kendi API'ım da olacak inş ancak o zamana kadar versiyon güncellemelerini kontrol edebileceğim ufak, şirin bir metod'a ihtiyacım vardı.

Ne yapsam diye düşünürken çok yakın zamanda şirket içi eğitimde öğrendiğimiz azure'un serverless'inin function'larını kullanabilirim diye düşündüm. Sonra hali hazırda Firebase kullandığım için Firebase'in functions'ını inceledim ve direkt oraya yazayım diye karar verdim.. :)

Az yazdım, uz yazdım, dere tepe bir türlü odaklanamayarak ve uzun uzun yazdım ama sonunda bitti ve deploy aşamasına gelebildiiim :) 

Ama derin bir nefes alarak firebase deploy --only functions komutumu çalıştırdığımda başından beri yakamda olan mono lanetini yine başımda buldum. Şöyle bir hata vermekteydi;

firebase deploy --only functions

=== Deploying to 'my-api'...

i  deploying functions
Running command: npm --prefix "$RESOURCE_DIR" run lint

> functions@ lint /Users/monolara/Desktop/git/MyAPI/functions
> eslint .


/Users/monolara/Desktop/git/MyAPI/functions/index.js
  16:36  error  Parsing error: Unexpected token =>

✖ 1 problem (1 error, 0 warnings)

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! functions@ lint: `eslint .`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the functions@ lint script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/monolara/.npm/_logs/2019-04-06T13_28_06_446Z-debug.log

Error: functions predeploy error: Command terminated with non-zero exit code1

Having trouble? Try firebase deploy --help

Kızdığı şey async metodlarımdı. Ama nasıl olurdu, quickstart örneklerinde dahi async yazmışlardı ve "localimde çalışıyor"du.

Araştırdım. Ve sorunun firebase-functions'ın benim için oluşturduğu default projede ecmaVersion'ın 6 olarak geldiğini ve bu versiyonda async metodların olmadığını öğrendim. Kısaca çözüm;

.eslintrc.json dosyamızdaki ecmaVersion değerini 2017 ile değiştirmekte. Yani şöyle;
"parserOptions": { // Required for certain syntax usages "ecmaVersion": 2017 },

Bir de package.json dosyamıza şunu da eklemek gerek;
"engines": { "node": "8" },

Bir mono lanetini daha böyle aşıp güzel güzel deployumuzu yaptık. Darısı diğer lanetlere :)