Vugu é uma biblioteca experimental para UIs da web escrita em Go e segmentando WebAssembly. Guia e documentos em https://www.vugu.org. Godoc em https://godoc.org/github.com/vugu/vugu.
Se você já quis escrever uma interface do usuário não em JS, mas pura, vá ... e executá -la no seu navegador, agora ... que (experimental;) o futuro está aqui!
Introduzindo Vugu (pronunciado /ˈvuː.ɡuː/), uma biblioteca inspirada em vuejs em Go direcionando-se.
Sem nó. Sem js. Sem npm. Nenhuma pasta Node_modules competindo com sua biblioteca de músicas pelo espaço em disco.
Comece: http://www.vugu.org/doc/start
Ainda é um trabalho em andamento, mas muitas coisas já estão funcionais. Alguns funcionam muito bem.
Você deve ter v1.22.3 como um mínimo para usar vugu . Exigimos as alterações de loop que foram introduzidas em Go v1.22, e a v1.22.3 foi a última no momento da escrita.
vugu para colaboradores vugu agora usa o MAGE para gerenciar a construção das ferramentas vugu - vugugen , vugufmt e vgfrom . O MAGE também é usado para gerenciar o processo de teste.
Consulte a instrução de construção atualizada no guia dos colaboradores
Para executar os exemplos, você deve ter a ferramenta mage , docker e goimports instalados. vugu usa mage para gerenciar o processo de construção.
A maneira mais simples de instalar mage é:
git clone https://github.com/magefile/mage
cd mage
go run bootstrap.go
Você deve executar mage da raiz do módulo de vugu , este é o diretório onde existe o nível go.mod .
Você também precisará da ferramenta goimports instalada. É muito provável que você já tenha instalado isso, normalmente como parte de um plug -in do editor. Caso contrário, ele pode ser instalado com:
go install golang.org/x/tools/cmd/goimports@latest
Para executar os exemplos, você também precisará docker instalado. Se você não tiver docker instalado, siga as instruções de instalação do Docker. Cada exemplo será servido por um contêiner nginx local.
Todos os exemplos estão no diretório de examples . Cada subdiretório de examples contém um único exemplo. Cada exemplo é o próprio módulo Go.
Construir e servir todos os exemplos é simples como:
cd path/to/vugu
mage examples
ou
cd path/to/vugu
mage -v examples
Cada exemplo será servido em um URL da forma
http://localhost:8888/<name-of-example-directory>
Por exemplo, para ver o exemplo fetch-and-display o URL seria:
http://localhost:8888/fetch-and-display
Ou se você deseja executar apenas um único exemplo, use:
cd path/to/vugu
mage singleExample <name-of-example-module>
Por exemplo, para servir apenas o exemplo fetch-and-display que o comando seria:
cd path/to/vugu
mage singleExample github.com/vugu/vugu/example/fetch-and-display
Se você precisar criar um novo exemplo, o processo é bastante direto. O ponto crítico é baseá -lo em um exemplo de funcionamento.
Por exemplo
cd /path/to/vugu
cp -r ./examples/fetch-and-display/ ./examples/my-new-example
O cp copiará tudo no diretório, incluindo o arquivo .gitignore local crítico para o novo diretório de exemplo. Por favor, faça com que o .gitignore esteja presente para garantir que os arquivos gerados por Vugu não sejam enviados ao repositório.
Você então precisa editar o ./examples/my-new-example/go.mod para alterar o nome do módulo. Esta etapa é crítica.
O nome do módulo deve ser alterado para corresponder ao exemplo; portanto, neste caso, o nome do módulo seria alterado para github.com/vugu/vugu/examples/my-new-example
Em seguida, você pode editar o root.vugu , root.go conforme necessário para apoiar o exemplo ou adicionar mais arquivos *.vugu e *.go conforme necessário.
Os arquivos main_wasm.go e wasm_exec.js não devem ser editados.
O arquivo Exemplos index.html precisará ser editado em dois locais distintos. O primeiro é Circa Line 11
<script src="/fetch-and-display/wasm_exec.js"></script>
Para alterar o caminho para refletir o nome do exemplo. Nesse caso:
<script src="/my-new-example/wasm_exec.js"></script>
A segunda mudança é semelhante, mas reflete o caminho do main.wasm Binário. Esta é a linha 29
WebAssembly.instantiateStreaming(fetch("/fetch-and-display/main.wasm"), go.importObject).then((result) => {
que neste caso seria alterado para:
WebAssembly.instantiateStreaming(fetch("/my-new-example/main.wasm"), go.importObject).then((result) => {
O novo exemplo pode ser construído e servido com:
cd /path/to/vugu
mage examples
Ou individualmente assim:
cd /path/to/vugu
mage singleExample github.com/vugu/vugu/example/my-new-example
<tag :prop='expr'> . É construído mais como uma biblioteca do que uma estrutura . Embora o Vugu faça geração de código para seus arquivos de componentes .vugu (e até produza um padrão main_wasm.go para um novo projeto e construa seu programa automaticamente após a atualização da página), fundamentalmente você ainda está no controle. Fluxo geral do programa, fiação de aplicativos e inicialização, o loop de renderização que mantém a página sincronizada com seus componentes - você tem controle sobre tudo isso. Estruturas chamam seu código. O Vugu é uma biblioteca, seu código o chama (mesmo que o Vugu gera um pouco disso para você no começo para facilitar as coisas). Um dos principais objetivos para o Vugu, quando se trata de desenvolvedores, primeiro o encontra, foi tornar muito rápido e fácil começar, mas sem impor limitações desnecessárias sobre como um projeto é estruturado. Vá construir ferramentas (e agora o sistema de módulos) é incrível. A idéia é alavancar isso na medida mais possível, em vez de reprogramar a roda.
Portanto, você não encontrará uma ferramenta de linha de comando Vugu que execute um servidor de desenvolvimento; em vez disso, você encontrará nos documentos um trecho de código apropriado que você pode colar em um arquivo e go run você mesmo. Para a geração de código, enquanto houver um http.handler que possa fazer isso na página Atualizar, você também pode (e deve!) Executar vugugen via go generate . Existem muitas pequenas decisões em Vugu que seguem essa filosofia: sempre que razoavelmente possível, basta usar o mecanismo existente em vez de inventar novamente. E continue fazendo isso até que haja prova de que algo mais é realmente necessário. Até agora está funcionando bem. E permite que Vugu se concentre nas coisas específicas que traz para a mesa.
Exemplos de implementações podem ser encontrados em exemplos de repositórios
Como a maior parte do seu código estará nos arquivos .vugu , você precisará instalar os créditos do VSCODE-VUGU IT para @BINHONGLEE.