Como começar rapidamente com VUE3.0: Entre no aprendizado
A imagem acima mostra as informações da versão测试环境/开发环境
exibidas na página. [Tutoriais relacionados recomendados: "Tutorial Angular"]
Haverá uma introdução mais tarde.
A imagem acima mostra as informações Git Commit
de cada envio. Claro, aqui eu gravo cada envio.
Então, vamos usar Angular
para obter o próximo efeito. O mesmo se aplica a React
e Vue
.
Como o foco aqui não é construir o ambiente, podemos apenas usar angular-cli
para gerar diretamente um projeto.
Etapa 1: Instale a ferramenta de andaime
npm install -g @angular/cli
Etapa 2: Crie um projeto
# ng new PROJECT_NAME ng new ng-commit
Etapa 3: Execute o projeto
npm run start
O projeto está em execução. Ele escuta a porta 4200
por padrão. Basta abrir http://localhost:4200/
no navegador.
Sob a premissa de que a porta 4200 não está ocupada
neste momento, a composição da pasta chave src
do projeto ng-commit
é a seguinte:
src ├── app // Corpo do aplicativo │ ├── app-routing.module.ts // Módulo de roteamento │ . │ └── app.module.ts // Módulo de aplicação ├── ativos // Recursos estáticos ├── main.ts // Arquivo de entrada. └── style.less // A estrutura de diretório acima do estilo global
Adicionaremos o diretório de serviço de services
no diretório app
e o arquivo version.json
no diretório assets
posteriormente.
e crie um arquivo version.txt
no diretório raiz para armazenar as informações enviadas; crie um arquivo commit.js
no diretório raiz para operar as informações do envio;
O foco está no commit.js
, vamos direto ao tópico:
const execSync = require('child_process').execSync; const fs = requer('fs') const versionPath = 'versão.txt' const buildPath = 'dist' const autoPush = verdadeiro; const commit = execSync('git show -s --format=%H').toString().trim(); // Número da versão atual let versionStr = ''; ) { versionStr = fs.readFileSync(versionPath).toString() + 'n'; } if(versionStr.indexOf(commit) != -1) { console.warn('x1B[33m%sx1b[0m', 'warming: Os dados da versão atual do git já existem!n') } outro { deixe nome = execSync('git show -s --format=%cn').toString().trim(); // nome deixe email = execSync('git show -s --format=%ce').toString ().trim(); // E-mail let date = new Date(execSync('git show -s --format=%cd').toString()); --format=%s').toString().trim(); // Descrição versionStr = `git:${commit}nAutor:${nome}<${email}>nData:${data .getFullYear ()+'-'+(date.getMonth()+1)+'-'+date.getDate()+' '+date.getHours()+':'+date.getMinutes()}n Descrição: ${mensagem}n${new Array(80).join('*')}n${versionStr}`; fs.writeFileSync(versionPath, versionStr); // Depois de escrever as informações da versão, envie automaticamente as informações da versão para o git da ramificação atual if(autoPush) { // Esta etapa pode ser escrita de acordo com as necessidades reais execSync(`git add ${ versionPath }`); execSync(`git commit ${ versionPath } -m envia automaticamente as informações da versão`); execSync(`git push origin ${ execSync('git rev-parse --abbrev-ref HEAD').toString().trim() }`) } } if(fs.existsSync(buildPath)) { fs.writeFileSync(`${ buildPath }/${ versionPath }`, fs.readFileSync(versionPath)) }
Os arquivos acima podem ser processados diretamente através node commit.js
. Para facilitar o gerenciamento, adicionamos a linha de comando ao package.json
:
"scripts": { "commit": "nó commit.js" }
Dessa forma, usar npm run commit
tem o mesmo efeito que node commit.js
.
Com a preparação acima, podemos gerar informações de versão version.json
no formato especificado por meio das informações commit
.
Crie um novo arquivo version.js
no diretório raiz para gerar dados de versão.
const execSync = require('child_process').execSync; const fs = requer('fs') const targetFile = 'src/assets/version.json'; //O arquivo de destino armazenado em const commit = execSync('git show -s --format=%h').toString().trim(); Número da versão enviada, os primeiros 7 dígitos do valor hash let date = new Date(execSync('git show -s --format=%cd').toString()); - s --format=%s').toString().trim(); // Descrição let versionObj = { "comprometer": confirmar, "data": data, "mensagem": mensagem }; dados const = JSON.stringify(versãoObj); fs.writeFile(targetFile, dados, (erro) => { se(erro) { lançar errar } console.log('Os dados do Stringify Json são salvos.') })
Adicionamos uma linha de comando ao package.json
para facilitar o gerenciamento:
"scripts": { "versão": "nó versão.js" }
development
informações de versão diferentes test
production
diferentes.
major.minor.patch
. Por exemplo:major.minor.patch:beta
. Por exemplo:major.minor.path-data:hash
, como: 1.1.0-2022.01.01:4rtr5rgpara facilitar o gerenciamento de diferentes ambientes Criamos um novo arquivo no diretório raiz do projeto da seguinte forma:
config. ├── default.json // Arquivo de configuração chamado pelo projeto ├── development.json // Arquivo de configuração do ambiente de desenvolvimento ├── production.json // Arquivo de configuração do ambiente de produção └── test.json // Arquivo de configuração do ambiente de teste
relacionado O conteúdo do arquivo é o seguinte:
// development.json { "env": "desenvolvimento", "versão": "1.3.0" }
//produção.json { "env": "produção", "versão": "1.3.0" }
//teste.json { "env": "teste", "versão": "1.3.0" }
default.json
copia as informações de configuração de diferentes ambientes com base na linha de comando e configura-as em package.json
:
"scripts": { "copyConfigProduction": "cp ./config/production.json ./config/default.json", "copyConfigDevelopment": "cp ./config/development.json ./config/default.json", "copyConfigTest": "cp ./config/test.json ./config/default.json", }
É fácil mano, certo?
Integrar o conteúdo das informações de versão geradas para gerar informações de versões diferentes de acordo com os diferentes ambientes. O código específico é o seguinte:
const execSync = require('child_process').execSync; const fs = requer('fs') const targetFile = 'src/assets/version.json' // O arquivo de destino armazenado em const config = require('./config/default.json'); const commit = execSync('git show -s --format=%h').toString().trim() //O número da versão atualmente enviada let date = new Date(execSync('git show -s --format); =%cd').toString()); // Data let message = execSync('git show -s --format=%s').toString().trim(); "env":config.env, "versão": "", "comprometer": confirmar, "data": data, "mensagem": mensagem }; //Formato data const formatDay = (data) => { deixe data_formatada = data.getFullYear() + "." retornar data_formatada; } if(config.env === 'produção') { versãoObj.versão = config.versão } if(config.env === 'desenvolvimento') { versionObj.version = `${ config.version }:beta` } if(config.env === 'teste') { versionObj.version = `${ config.version }-${ formatDay(data) }:${ commit }` } dados const = JSON.stringify(versãoObj); fs.writeFile(targetFile, dados, (erro) => { se(erro) { lançar errar } console.log('Os dados do Stringify Json são salvos.') })
Adicione linhas de comando para diferentes ambientes em package.json
:
"scripts": { "build:production": "npm run copyConfigProduction && npm run version", "build:development": "npm run copyConfigDevelopment && npm run version", "build:test": "npm run copyConfigTest && npm run version", }
As informações da versão gerada serão armazenadas diretamente em assets
e o caminho específico é src/assets/version.json
.
angular
última etapa é exibir as informações da versão na página.
Use ng generate service version
para gerar version
no diretório app/services
. Adicione informações de solicitação ao arquivo version.service.ts
gerado da seguinte forma:
import { Injectable } from '@angular/core'; importar { HttpClient } de '@angular/common/http'; importar {Observável} de 'rxjs'; @Injetável({ fornecidoIn: 'root' }) classe de exportação VersionService { construtor( http privado: HttpClient ) { } public getVersion():Observável<qualquer> { retorne isto.http.get('assets/version.json') } }
Antes de usar a solicitação, monte o módulo HttpClientModule
no arquivo app.module.ts
:
import { HttpClientModule } from '@angular/common/http'; // ... importações: [ Módulo HttpClient ],
então basta chamá-lo no componente. Aqui está o arquivo app.component.ts
:
import { Component } from '@angular/core'; import { VersionService } from './services/version.service' //Introduzir serviço de versão @Component({ seletor: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.less'] }) classe de exportação AppComponent { versão pública: string = '1.0.0' construtor( versionService somente leitura privado: VersionService ) {} ngOnInit() { this.versionService.getVersion().subscribe({ próximo: (dados: qualquer) => { this.version = data.version //Alterar informações da versão}, erro: (erro: qualquer) => { console.error(erro) } }) } }
Neste ponto, completamos as informações da versão. Vamos finalmente ajustar o comando de package.json
:
"scripts": { "start": "ng servir", "versão": "nó versão.js", "commit": "nó commit.js", "construir": "ng construir", "build:production": "npm run copyConfigProduction && npm run version && npm run build", "build:development": "npm run copyConfigDevelopment && npm run version && npm run build", "build:test": "npm run copyConfigTest && npm run version && npm run build", "copyConfigProduction": "cp ./config/production.json ./config/default.json", "copyConfigDevelopment": "cp ./config/development.json ./config/default.json", "copyConfigTest": "cp ./config/test.json ./config/default.json" }
O objetivo da utilização scripts
é facilitar o gerenciamento, mas também facilitar a construção e chamada jenkins
. Quanto ao jenkins
, as partes interessadas podem tentar por conta própria.