DEV Community

José Ulisses
José Ulisses

Posted on

1

Criando um app de terminal (CLI) para criar arquivos react #2

Tabela de Conteúdos

Parte 1: Estrutura

Essa é a parte 2 do projeto para criar um aplicativo de linha de comando que cria arquivos para projetos react.

Vamos ao código, anteriormente criamos as classes CreateComponentCommand e a CreateComponentSettings no mesmo arquivo, vamos remover a CreateComponentSettings para o seu proprio arquivo.

.
├── ...
├── Program.cs
├── CreateComponentCommand.cs
└── CreateComponentSettings.cs
Enter fullscreen mode Exit fullscreen mode

A estrutura de arquivos do projeto deve ficar assim. E os arquivos assim:

CreateComponentSettings.cs

using Spectre.Console.Cli;

namespace reactcomponent;

internal class CreateComponentSettings : CommandSettings
{
    [CommandArgument(0, "<componentName>")]
    public string ComponentName { get; set; }
}
Enter fullscreen mode Exit fullscreen mode

CreateComponentCommand.cs

using Spectre.Console.Cli;

namespace reactcomponent;
internal class CreateComponentCommand : Command<CreateComponentSettings>
{
    public override int Execute(CommandContext context, CreateComponentSettings settings)
    {
        Console.WriteLine($"nome do component {settings.ComponentName}");
        return 0;
    }
}

Enter fullscreen mode Exit fullscreen mode

Program.cs

using reactcomponent;

using Spectre.Console;
using Spectre.Console.Cli;

var app = new CommandApp();

app.Configure(app =>
{
    app.AddCommand<CreateComponentCommand>("create");
});

app.Run(args);
Enter fullscreen mode Exit fullscreen mode

Parte 2: Criando arquivo

Em para criarmos o arquivo precisamos pegar a localização que o programa foi chamado no terminal, em C# podemos utilizar uma propriedade da classe Environment. Podemos alterar o que vai ser exibido para exibir a pasta, o programa vai ficar assim:

\*CreateComponentCommand.cs*\
...
public override int Execute(CommandContext context, CreateComponentSettings settings)
{
    Console.WriteLine($"nome do component {settings.ComponentName} {Environment.CurrentDirectory}");
    return 0;
}
...
Enter fullscreen mode Exit fullscreen mode

Resultado depois de rodar o programa

Com isso podemos criar o arquivo, por enquanto ele vai ser criado na pasta que o programa foi chamado.

CreateComponentCommand.cs

...
public override int Execute(CommandContext context, CreateComponentSettings settings)
{
    File.Create(Environment.CurrentDirectory + $@"\{settings.ComponentName}.jsx");
    return 0;
}
...
Enter fullscreen mode Exit fullscreen mode

Ao rodarmos o comando no terminal, passando o "Nav" deverá ser criado o arquivo Nav.jsx na pasta do programa.

dotnet run -- create Nav
Enter fullscreen mode Exit fullscreen mode

Arquivo Nav.jsx criado na pasta raiz do programa

Agora temos um programa que criar um arquivo jsx com o nome passado por parâmetro.

Parte 3: Criando pasta para o componente

Normalmente ao criarmos componente react, vamos colocar esse componente em sua própria pasta. Podemos fazer isso em C# de maneira fácil, primeiro vamos pegar o caminho atual e adicionar ao fim o nome da pasta, neste caso vai ser o mesmo nome do component, depois vamos verificar se esse diretório existe, pois se não existir devemos criar o mesmo. Com o diretorio criado podemos então criar o arquivo nesse novo diretório.

CreateComponentCommand.cs

...
public override int Execute(CommandContext context, CreateComponentSettings settings)
{
    var directory = new DirectoryInfo(Environment.CurrentDirectory + $@"\{settings.ComponentName}");

    if (!directory.Exists)
    directory = Directory.CreateDirectory($@"{Environment.CurrentDirectory}\{settings.ComponentName}");

    File.Create(directory.FullName + $@"\{settings.ComponentName}.jsx");
    return 0;
}
...
Enter fullscreen mode Exit fullscreen mode

Executando o comando para rodar o aplicativo novamente pelo terminal, podemos ver que ele está criando o arquivo e pasta correspondente ao nome que passarmos como argumento.

Parte 4: Criando estilo

Não só de arquivo jsx vive o ser humano. Precisamos de alguns estilos também, com tudo que temos até agora fica fácil saber o que precisamos adicionar para que o programa consiga criar um arquivo css também. Porém um padrão que gosto de seguir é ao criar um novo componente é utilizar o arquivo que contém o mesmo com o nome de index.jsx ao invés do nome do component, por isso vamos fazer uma pequena alteração além de apenas criar o arquivo css.

CreateComponentCommand.cs

...
public override int Execute(CommandContext context, CreateComponentSettings settings)
{
    ...

    File.Create(directory.FullName + @"\index.jsx");
    File.Create(directory.FullName + @"\styles.css");
    return 0;
}
...
Enter fullscreen mode Exit fullscreen mode

Precisamos apenas substituir a linha que criar o arquivo jsx com o argumento, para o padrão "index" e adicionarmos uma linha abaixo para criarmos o arquivo de estilos. Ao rodarmos o aplicativo, teremos os seguintes novos arquivos:

dotnet run -- create Menu
Enter fullscreen mode Exit fullscreen mode

Arquivos index.jsx e styles.css criado na pasta com o nome passado como argumento

Final

Com isso deixamos o nosso aplicativo muito mais funcional e útil que quando finalizarmos a parte 1. Porém ainda é necessário publicar esse programa para que possamos utilizar o mesmo em qualquer diretório do nosso sistema, veremos isso na parte 3.

Github

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay