REPL
Assim como o Node.js REPL, AdonisJS oferece um REPL com reconhecimento de aplicativo para interagir com seu aplicativo a partir da linha de comando. Você pode iniciar a sessão REPL usando o comando node ace repl
.
node ace repl
Além de um REPL Node.js padrão, AdonisJS fornece os seguintes recursos.
- Importar e executar arquivos TypeScript.
- Métodos abreviados para importar serviços de contêiner como o serviço
router
,helpers
,hash
e assim por diante. - Contêiner IoC.
- API extensível para adicionar métodos personalizados e comandos REPL.
Interagindo com REPL
Depois de iniciar a sessão REPL, você verá um prompt interativo no qual pode escrever um código JavaScript válido e pressionar Enter para executá-lo. A saída do código será impressa na linha a seguir.
Se quiser digitar várias linhas de código, você pode entrar no modo editor digitando o comando .editor
. Pressione Ctrl+D
para executar uma instrução multilinha ou Ctrl+C
para cancelar e sair do modo editor.
> (js) .editor
# // Entering editor mode (Ctrl+D to finish, Ctrl+C to cancel)
Acessando o resultado do último comando executado
Se você esquecer de atribuir o valor de uma instrução a uma variável, poderá acessá-la usando a variável _
. Por exemplo:
> (js) helpers.string.generateRandom(32)
# 'Z3y8QQ4HFpYSc39O2UiazwPeKYdydZ6M'
> (js) _
# 'Z3y8QQ4HFpYSc39O2UiazwPeKYdydZ6M'
> (js) _.length
# 32
> (js)
Acessando o erro gerado pelo último comando executado
Você pode acessar a exceção gerada pelo comando anterior usando a variável _error
. Por exemplo:
> (js) helpers.string.generateRandom()
> (js) _error.message
# 'The value of "size" is out of range. It must be >= 0 && <= 2147483647. Received NaN'
Pesquisando no histórico
O histórico do REPL é salvo no arquivo .adonisjs_v6_repl_history
no diretório inicial do usuário.
Você pode percorrer os comandos do histórico pressionando a tecla de seta para cima ↑
ou pressionando Ctrl+R
para pesquisar no histórico.
Saindo da sessão REPL
Você pode sair da sessão REPL digitando .exit
ou pressionando Ctrl+C
duas vezes. O AdonisJS executará um desligamento normal antes de fechar a sessão REPL.
Além disso, se você modificar sua base de código, deverá sair e reiniciar a sessão REPL para que novas alterações sejam aplicadas.
Importando módulos
O Node.js não permite usar as instruções import
dentro da sessão REPL. Portanto, você deve usar a função dinâmica import
e atribuir a saída a uma variável. Por exemplo:
const { default: User } = await import('#models/user')
Você pode usar o método importDefault
para acessar a exportação padrão sem desestruturar as exportações.
const User = await importDefault('#models/user')
Métodos auxiliares
Os métodos auxiliares são funções de atalho que você pode executar para realizar ações específicas. Você pode visualizar a lista de métodos disponíveis usando o comando .ls
.
> (js) .ls
# GLOBAL METHODS:
importDefault Returns the default export for a module
make Make class instance using "container.make" method
loadApp Load "app" service in the REPL context
loadEncryption Load "encryption" service in the REPL context
loadHash Load "hash" service in the REPL context
loadRouter Load "router" service in the REPL context
loadConfig Load "config" service in the REPL context
loadTestUtils Load "testUtils" service in the REPL context
loadHelpers Load "helpers" module in the REPL context
clear Clear a property from the REPL context
p Promisify a function. Similar to Node.js "util.promisify"
Adicionando métodos personalizados ao REPL
Você pode adicionar métodos personalizados ao REPL usando repl.addMethod
. O método aceita o nome como o primeiro argumento e o retorno de chamada de implementação como o segundo argumento.
Para demonstração, vamos criar um arquivo preload file e definir um método para importar todos os modelos do diretório ./app/models
.
node ace make:preload repl -e=repl
// title: start/repl.ts
import app from '@adonisjs/core/services/app'
import repl from '@adonisjs/core/services/repl'
import { fsImportAll } from '@adonisjs/core/helpers'
repl.addMethod('loadModels', async () => {
const models = await fsImportAll(app.makePath('app/models'))
repl.server!.context.models = models
repl.notify('Imported models. You can access them using the "models" property')
repl.server!.displayPrompt()
})
Você pode passar as seguintes opções para o método repl.addMethod
como o terceiro argumento.
description
: Descrição legível para exibir na saída de ajuda.usage
: Defina o snippet de código de uso do método. Se não for definido, o nome do método será usado.
Uma vez feito, você pode reiniciar a sessão REPL e executar o método loadModels
para importar todos os modelos.
node ace repl
# Type ".ls" to a view list of available context methods/properties
> (js) await loadModels()