Por Doug Stevenson, Developer Advocate
Você está a fim de aprender algo novo neste ano? Então quero recomendar o TypeScript para desenvolvimento com o Cloud Functions!
Há pouco tempo, a equipe do Cloud Functions for Firebase lançou uma atualização do Firebase CLI que facilita a criação de funções em TypeScript, substituindo o JavaScript. A equipe do Firebase recomenda que você considere a mudança para o TypeScript. Mas posso imaginar que você esteja um pouco relutante para aprender uma nova linguagem, principalmente se você manda bem em JavaScript. A boa notícia é que o TypeScript oferece vários benefícios que você pode aproveitar facilmente agora mesmo.
A própria linguagem oferece diversos recursos que facilitam a leitura e a escrita de código e reduzem a probabilidade de erros:
Verificação de tipo estático (opcional)
Classes e interfaces
Genéricos
Enums
A linguagem também oferece recursos de async/await do ECMAScript 2017, que facilitam a criação de código assíncrono. O maior desafio do código assíncrono é gerenciar as promessas. Embora seja difícil dominar esse gerenciamento, é crucial compreendê-lo corretamente para desenvolver com o Cloud Functions . O TypeScript facilita muito tudo isso.
Mas o que eu realmente quero detalhar aqui é uma ferramenta excelente chamada TSLint , que verifica o código em TypeScript para detectar possíveis problemas antes de implantar no Cloud Functions. O Firebase CLI solicitará que você configure o TSLint quando inicializar o Functions em um projeto usando o TypeScript, e recomendamos que você faça isso.
Ativação do TypeScript e do TSLint
Quando escolher o TypeScript e o TSLint para a estrutura do seu projeto no Firebase, o Firebase CLI adicionará e modificará alguns arquivos do projeto quando você executar firebase init
. Vamos começar examinando functions/package.json
. Nele, você verá esta chave:
"devDependencies": {
"tslint": "^5.8.0",
"typescript": "^2.6.2"
},
É aqui que o nó aciona o TypeScript e o TSLint para desenvolvimento. Veja que há "devDependencies" separadas das "dependências" normais que você usa no código da função. As "devDependencies" só ficam armazenadas na sua máquina e são disponibilizadas como ferramentas para o desenvolvimento. Elas não são implantadas com o código. Ainda nesse arquivo, veja que há duas definições de script:
"scripts": {
"lint": "./node_modules/.bin/tslint -p tslint.json",
"build": "./node_modules/.bin/tsc",
...
}
Com elas, você pode executar npm run lint
e npm run build
na linha de comando do seu diretório de funções. A primeira execução verifica o código com o TSLint e a segunda compila esse código com o compilador do TypeScript.
O próximo arquivo que examinaremos o firebase.json
. Agora, ele tem um gancho de pré-implantação que executa o TSLint no seu código. Se um erro for encontrado, a implantação será interrompida:
{
"functions": {
"predeploy": [
"npm --prefix $RESOURCE_DIR run lint",
"npm --prefix $RESOURCE_DIR run build"
]
}
}
O próximo arquivo é functions/tsconfig.json
. Ele contém a configuração do compilador do TypeScript.
{
"compilerOptions": {
"lib": ["es6"],
"module": "commonjs",
"noImplicitReturns": true,
"outDir": "lib",
"sourceMap": true,
"target": "es6"
},
"compileOnSave": true,
"include": [
"src"
]
}
Não vou falar de todas as configurações, mas é importante saber que o compilador busca arquivos-fonte TypeScript em functions/src
e os compila para JavaScript em functions/lib
, mantendo a compatibilidade com ECMAScript 6, como exigido pelo Cloud Functions. No momento, o Cloud Functions executa o Node 6, o que significa que compreende nativamente o código do ES6.
Por fim, vamos dar uma breve olhada em functions/tslint.json
. Esse arquivo lista todas as regras observadas quando o TSLint verifica o seu código. Você pode adicionar novas regras aqui ou remover as que não quiser. Sugiro deixar tudo como está, porque a lista de regras foi definida pela equipe do Firebase para justamente ajudar a criar funções. Se violados, os "erros estritos" com valores definidos como true
causarão erros em tempo de compilação. Os avisos abaixo deles apenas reclamarão de possíveis problemas, e a equipe acredita que você deve tentar resolvê-los.
Beleza, agora quero um exemplo!
OK, vamos lá! Dê uma olhada nesta função que preenche uma propriedade chamada createdAt
quando um nó de usuário é criado no Realtime Database. Já achou o erro?
export const onUserCreate =
functions.database.ref('/users/{uid}').onCreate(event => {
event.data.ref.update({ createdAt: Date.now() })
})
O TSLint detecta o problema, que é um dos erros mais comuns do desenvolvimento de funções. Se você executar npm run build
neste código, verá este erro na saída:
Promises must be handled appropriately
O erro é gerado pela regra no-floating-promises . O TSLint percebe que event.data.ref.update
retorna uma promessa, que não é utilizada. A forma correta de lidar com promessas de acionadores de banco de dados é retorná-las:
export const onUserCreate =
functions.database.ref('/users/{uid}').onCreate(event => {
return event.data.ref.update({ createdAt: Date.now() })
})
Se você usar async/wait, poderá também declarar a função async
e usar await
para retorná-la:
export const onUserCreate =
functions.database.ref('/users/{uid}').onCreate(async event => {
await event.data.ref.update({ createdAt: Date.now() })
})
O gerenciamento correto de promessas é essencial para trabalhar com o Cloud Functions, e o TSLint mostra onde isso não está acontecendo.
Quero feedback mais rápido!
Eu desenvolvo muito para Android e estou acostumado com o Android Studio analisando meu código enquanto digito. Isso é muito bom, porque eu recebo feedback imediato sobre o que poderia dar errado. Na equipe do Firebase, vários de nós usam VSCode para editar TypeScript. O VSCode usa o TSLint para fornecer feedback instantâneo. A extensão do TSLint é bem fácil de instalar.
Acesse View -> Extensions. Digite "TSLint" na caixa de pesquisa à esquerda. Encontre a extensão TSLint e clique no botão "Install". Quando a instalação acabar, clique no botão "Reload". Agora, os possíveis erros serão indicados no TypeScript.
Quer mais um exemplo?
Essa é uma função HTTPS que busca um documento de usuário no Firestore usando o Admin SDK. Aparentemente, a função está OK e funciona corretamente:
export const getUser = functions.https.onRequest((req, res) => {
var uid = req.params.uid
const doc = admin.firestore().doc(`users/${uid}`)
doc.get().then(doc => {
res.send(doc.data())
}).catch(error => {
res.status(500).send(error)
})
})
Mas, se visualizada no VSCode com marcadores do TSLint, você verá que ela viola algumas práticas recomendadas:
Veja as linhas sublinhadas em var
, uid
e doc
. Se você parar o cursor no código marcado, verá uma mensagem do TSLint:
Nesse caso, o TSLint está usando a regra prefer-const para mostrar a você que é melhor usar const
em vez de var
para declarar valores que não mudam. Isso é bom para a legibilidade do código, além de evitar que alguém mude algo sem querer no futuro.
A linha sublinhada em doc
é o TSLint usando a regra no-shadowed-variable para mostrar que o parâmetro doc
da função passado a then()
(um objeto DeltaDocumentSnapShot) está mascarando a constante doc
no escopo maior (um objeto DocumentReference), o que impede o seu uso. Embora isso não seja um bug, pode gerar confusão sobre que instância de "doc" está sendo referenciada em um determinado momento. Para resolver o problema, basta renomear uma das instâncias.
Esta é uma versão da mesma função sem o lint:
export const getUser = functions.https.onRequest((req, res) => {
const uid = req.params.uid
const doc = admin.firestore().doc(`users/${uid}`)
doc.get().then(snapshot => {
res.send(snapshot.data())
}).catch(error => {
res.status(500).send(error)
})
})
O TSLint fica feliz com isso, e você também deveria, porque está programando melhor!
Se ainda não começou a aprender o TypeScript, esta é uma ótima oportunidade para começar. É muito fácil começar a usar, porque o TypeScript é um superconjunto estrito do JavaScript, o que quer dizer que todo o código JavaScript atual já é código TypeScript válido. Então, basta renomear os arquivos .js para .ts e colocá-los na pasta functions/src. E começar a usar os recursos da linguagem TypeScript como quiser. Depois conte para a gente como foi e envie um tweet para @Firebase .
Um comentário :
jasapoker yang dilengkapi sistem teknologi terbaru dengan server berkecepatan tinggi yang akan memberikan permainan Judi bola online jasa qq dan sbobet. Caranya sangat mudah, hanya dengan mendaftarkan diri anda di link alternatif juarapoker 2019
sekarang juga dan mulailah mereferensikan link referral anda kepada semua teman dan kenalan anda untuk ikut bermain bersama agen judi online remipoker yang terpercaya ini. Daftarkan diri anda sekarang juga di dominobet 2019 dan ajak teman anda untuk bermain bersama di satu meja!
jangan lupa lagi Akan semakin seru jika Mainbolajalan bisa dimainkan oleh anda semua,permainan yang FAIR PLAY yang akan diberikan dan akan anda rasakan di Mainbolajalan dengan BONUS ROLLINGAN SPORTBOOK 0.10% , BONUS ROLLINGAN CASINO 0.5% serta BONUS REFERRAL 1% dari WL Teman anda, Aman dan Terpercaya hanya ada di Bandar agen sbobet terpercaya di asia seperti pokerace99
Postar um comentário