moleculer-cli
Esta é uma ferramenta de linha de comando para o Moleculer ajudar no desenvolvimento & testes.
Instalação
$ npm i -g moleculer-cli |
Comandos
Init
O comando init
é usado para fazer um novo projeto Moleculer.
$ moleculer init project my-project |
O comando acima baixa o modelo de moleculerjs/moleculer-template-project, pede algumas informações e gera um novo módulo para a pasta ./my-project
.
Respostas a partir de um arquivo
Você pode colocar as respostas em um arquivo JSON e carrega-lo com o argumento --answers
. Isto pode ser útil para gerar o projeto programaticamente.
$ moleculer init project my-project --answers ./answers.json |
Desativar a instalação de dependências
Você pode desativar a instalação automática de dependências NPM com o argumento --no-install
. Isto pode ser útil para gerar o projeto programaticamente.
$ moleculer init project my-project --answers ./answers.json --no-install |
Templates oficiais
- project - Gera um projeto base Moleculer. Use-o se você quiser iniciar um novo projeto que seja baseado no framework Moleculer
- serviço de exemplo (
greeter
) - API Gateway (opcional)
- Arquivos Docker & Docker Compose
- Testes & cobertura com Jest
- Lint com ESLint
- serviço de exemplo (
- nano - Modelo mínimo de projeto para um microsserviço. Use-o se desejar criar um microsserviço que se conecte aos outros através do módulo de transporte
- module - Gerar um novo projeto de módulo de Moleculer (e.g.:
moleculer-xyz
). Use-o se você deseja criar um módulo para o framework Moleculer
Templates personalizados
$ moleculer init username/repo my-project |
Onde username/repo é o repositório do GitHub abreviado para seu diretório.
A notação curta de repositório é passada para download-git-repo de modo que pode ser bitbucket:username/repo
para um repositório do Bitbucket e username/repo#branch
para tags ou branches.
Templates locais
Em vez de um repositório GitHub, use um template do sistema de arquivos local:
$ moleculer init ./path/to-custom-template my-project |
Alias de Template
Para simplificar o uso de templates personalizados (local e remoto), é possível registrar um alias e usá-lo depois em vez de todo o Url do repositório.
$ moleculer alias-template myAlias somegithubuser/reponame |
Todos os alias de template registrados são armazenados no arquivo ~/.moleculer-templates.json
e também podem ser editados manualmente.
Criando Templates Personalizados
Templates do Moleculer consistem em um arquivo meta.js
e um diretório template
.
meta.js
O arquivo meta.js
exporta uma função que retorna um objeto que define a interface init do Moleculer CLI. A função recebe um parâmetro values
que dá acesso aos valores externos passados pelo CLI. O objeto possui várias chaves que são explicadas abaixo.
A propriedade questions
é uma matriz de objetos que definem as questões feitas no processo de iniciação. Esses objetos são objetos Inquirer.js. Dados coletados aqui são armazenados no objeto metadata
do Metalsmith.
A propriedade metalsmith
permite que código personalizado seja executado em diferentes pontos do processo de transformação. A função before
será executada antes da execução da transformação, a função after
é executada depois que a transformação é executada, e a função complete
é executada depois que a transformação é executada e os arquivos são copiados para o diretório de destino.
As funções metalsmith
levam um argumento metalsmith
que faz referência ao objeto Metalsmith. Um uso comum é obter os metadados do Metalsmith chamando metalsmith.metadata()
e, em seguida, adicionar ou modificar propriedades no objeto de metadados, então ele estará disponível para o resto da transformação.
O objeto filters
recebe um conjunto de chaves correspondentes a um caminho e um valor que corresponde ao nome de uma variável de pergunta. Se o valor da variável da questão é false
, o caminho especificado será ignorado durante a transformação e esses arquivos não serão adicionados ao projeto que está sendo inicializado.
A propriedade completeMessage
recebe uma string multi linha que será exibida após a inicialização ser concluída.
template
O diretório template
contém arquivos que serão transformados usando Handlebars e copiados para o diretório de destino. Handlebars recebem o objeto metadata
do Metalsmith para ser a fonte para substituição de string.
Handlebars também podem transformar nomes de arquivos.
Start
Este comando inicia um novo ServiceBroker
localmente e alterna para o modo REPL.
$ moleculer start |
Opções
--version Exibe o número da versão [boolean] |
Connect
Este comando inicia um novo ServiceBroker
, conecta-se a um servidor de transporte e muda para o modo REPL.
# Conectar com TCP transporter |
Opções
--version Exibe o número da versão [boolean] |
Call
O comando call
pode ser utilizado para estabelecer uma conexão com um projeto Moleculer e chamar uma ação com parâmetros. O resultado (JSON string) será impresso no console. Isto significa que você pode processar o resultado com outra ferramenta. Os parâmetros de chamada devem iniciar com prefixo @
e os parâmetros meta devem iniciar com prefixo #
.
Opções
--version Exibe o número da versão [boolean] |
Exemplo com parâmetros
moleculer call math.add --transporter NATS --@a 5 --@b 3 |
Exemplo com parâmetros & meta
moleculer call math.add --transporter NATS --@a 5 --@b 3 --#meta-key MyMetaValue |
Exemplo com pós-processamento do resultado com jq
moleculer call "\$node.health" | jq '.mem.free' |
O módulo de transporte pode ser definido através de uma variável de ambiente
TRANSPORTER
também.
Exemplo com o módulo de transporte em variável de ambiente
TRANSPORTER=nats://localhost:42222 moleculer call math.add --@a 5 --@b 3 |
Emit
O comando emit
pode ser utilizado para estabelecer uma conexão com um projeto Moleculer e emitir um evento com um payload. Os parâmetros de chamada devem iniciar com prefixo @
e os parâmetros meta devem iniciar com prefixo #
.
Opções
--version Exibe o número da versão [boolean] |
Exemplo com parâmetros
moleculer emit user.created --transporter NATS --@id 3 --@name John |
Exemplo com parâmetros & meta
moleculer emit math.add --transporter NATS --@id 3 --@name John --#meta-key MyMetaValue |
Exemplo com broadcast & grupos
moleculer emit math.add --transporter NATS --broadcast --@id 3 --@name John --group accounts |
Exemplo com vários grupos
moleculer emit math.add --transporter NATS --broadcast --@id 3 --@name John --group accounts --group mail |
O módulo de transporte pode ser definido através de uma variável de ambiente
TRANSPORTER
também.
Exemplo com o módulo de transporte em variável de ambiente
TRANSPORTER=nats://localhost:42222 moleculer call math.add --@a 5 --@b 3 |