返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Angular如何结合Git Commit进行版本处理
  • 625
分享到

Angular如何结合Git Commit进行版本处理

2024-04-02 19:04:59 625人浏览 安东尼
摘要

这篇文章主要介绍angular如何结合git Commit进行版本处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!上图是页面上展示的测试环境/开发环境版本信息。后面有介绍上图表示的

这篇文章主要介绍angular如何结合git Commit进行版本处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Angular如何结合Git Commit进行版本处理

上图是页面上展示的测试环境/开发环境版本信息。

后面有介绍

Angular如何结合Git Commit进行版本处理

上图表示的是每次提交的Git Commit的信息,当然,这里我是每次提交都记录,你可以在每次构建的时候记录。

So,我们接下来用 Angular 实现下效果,ReactVue 同理。

搭建环境

因为这里的重点不是搭建环境,我们直接用 angular-cli 脚手架直接生成一个项目就可以了。

Step 1: 安装脚手架工具

npm install -g @angular/cli

Step 2: 创建一个项目

# ng new PROJECT_NAME
ng new ng-commit

Step 3: 运行项目

npm run start

项目运行起来,默认监听4200端口,直接在浏览器打开Http://localhost:4200/就行了。

4200 端口没被占用的前提下

此时,ng-commit 项目重点文件夹 src 的组成如下:

src
├── app                                               // 应用主体
│   ├── app-routing.module.ts                         // 路由模块
│   .
│   └── app.module.ts                                 // 应用模块
├── assets                                            // 静态资源
├── main.ts                                           // 入口文件
.
└── style.less                                        // 全局样式

上面目录结构,我们后面会在 app 目录下增加 services 服务目录,和 assets 目录下的 version.JSON文件。

记录每次提交的信息

在根目录创建一个文件version.txt,用于存储提交的信息;在根目录创建一个文件commit.js,用于操作提交信息。

重点在commit.js,我们直接进入主题:

const execSync = require('child_process').execSync;
const fs = require('fs')
const versionPath = 'version.txt'
const buildPath = 'dist'
const autoPush = true;
const commit = execSync('git show -s --fORMat=%H').toString().trim(); // 当前的版本号

let versionStr = ''; // 版本字符串

if(fs.existsSync(versionPath)) {
  versionStr = fs.readFileSync(versionPath).toString() + '\n';
}

if(versionStr.indexOf(commit) != -1) {
  console.warn('\x1B[33m%s\x1b[0m', 'warming: 当前的git版本数据已经存在了!\n')
} else {
  let name = execSync('git show -s --format=%cn').toString().trim(); // 姓名
  let email = execSync('git show -s --format=%ce').toString().trim(); // 邮箱
  let date = new Date(execSync('git show -s --format=%cd').toString()); // 日期
  let message = execSync('git show -s --format=%s').toString().trim(); // 说明
  versionStr = `git:${commit}\n作者:${name}<${email}>\n日期:${date.getFullYear()+'-'+(date.getMonth()+1)+'-'+date.getDate()+' '+date.getHours()+':'+date.getMinutes()}\n说明:${message}\n${new Array(80).join('*')}\n${versionStr}`;
  fs.writeFileSync(versionPath, versionStr);
  // 写入版本信息之后,自动将版本信息提交到当前分支的git上
  if(autoPush) { // 这一步可以按照实际的需求来编写
    execSync(`git add ${ versionPath }`);
    execSync(`git commit ${ versionPath } -m 自动提交版本信息`);
    execSync(`git push origin ${ execSync('git rev-parse --abbrev-ref HEAD').toString().trim() }`)
  }
}

if(fs.existsSync(buildPath)) {
  fs.writeFileSync(`${ buildPath }/${ versionPath }`, fs.readFileSync(versionPath))
}

上面的文件可以直接通过 node commit.js 进行。为了方便管理,我们在 package.json 上加上命令行:

"scripts": {
  "commit": "node commit.js"
}

那样,使用 npm run commit 同等 node commit.js 的效果。

生成版本信息

有了上面的铺垫,我们可以通过 commit 的信息,生成指定格式的版本信息version.json了。

在根目录中新建文件version.js用来生成版本的数据。

const execSync = require('child_process').execSync;
const fs = require('fs')
const targetFile = 'src/assets/version.json'; // 存储到的目标文件

const commit = execSync('git show -s --format=%h').toString().trim(); //当前提交的版本号,hash 值的前7位
let date = new Date(execSync('git show -s --format=%cd').toString()); // 日期
let message = execSync('git show -s --format=%s').toString().trim(); // 说明

let versionObj = {
  "commit": commit,
  "date": date,
  "message": message
};

const data = JSON.stringify(versionObj);

fs.writeFile(targetFile, data, (err) => {
  if(err) {
    throw err
  }
  console.log('Stringify Json data is saved.')
})

我们在 package.json 上加上命令行方便管理:

"scripts": {
  "version": "node version.js"
}

根据环境生成版本信息

针对不同的环境生成不同的版本信息,假设我们这里有开发环境 development,生产环境 production 和车测试环境 test

  • 生产环境版本信息是 major.minor.patch,如:1.1.0

  • 开发环境版本信息是 major.minor.patch:beta,如:1.1.0:beta

  • 测试环境版本信息是 major.minor.path-data:hash,如:1.1.0-2022.01.01:4rtr5rg

方便管理不同环境,我们在项目的根目录中新建文件如下:

config
├── default.json          // 项目调用的配置文件
├── development.json      // 开发环境配置文件
├── production.json       // 生产环境配置文件
└── test.json             // 测试环境配置文件

相关的文件内容如下:

// development.json
{
  "env": "development",
  "version": "1.3.0"
}
// production.json
{
  "env": "production",
  "version": "1.3.0"
}
// test.json
{
  "env": "test",
  "version": "1.3.0"
}

default.json 根据命令行拷贝不同环境的配置信息,在 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",
}

Is easy Bro, right?

整合生成版本信息的内容,得到根据不同环境生成不同的版本信息,具体代码如下:

const execSync = require('child_process').execSync;
const fs = require('fs')
const targetFile = 'src/assets/version.json'; // 存储到的目标文件
const config = require('./config/default.json');

const commit = execSync('git show -s --format=%h').toString().trim(); //当前提交的版本号
let date = new Date(execSync('git show -s --format=%cd').toString()); // 日期
let message = execSync('git show -s --format=%s').toString().trim(); // 说明

let versionObj = {
  "env": config.env,
  "version": "",
  "commit": commit,
  "date": date,
  "message": message
};

// 格式化日期
const formatDay = (date) => {
  let formatted_date = date.getFullYear() + "." + (date.getMonth()+1) + "." +date.getDate()
    return formatted_date;
}

if(config.env === 'production') {
  versionObj.version = config.version
}

if(config.env === 'development') {
  versionObj.version = `${ config.version }:beta`
}

if(config.env === 'test') {
  versionObj.version = `${ config.version }-${ formatDay(date) }:${ commit }`
}

const data = JSON.stringify(versionObj);

fs.writeFile(targetFile, data, (err) => {
  if(err) {
    throw err
  }
  console.log('Stringify Json data is saved.')
})

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",
}

生成的版本信息会直接存放在 assets 中,具体路径为 src/assets/version.json

结合 Angular 在页面中展示版本信息

最后一步,在页面中展示版本信息,这里是跟 angular 结合。

使用 ng generate service versionapp/services 目录中生成 version 服务。在生成的 version.service.ts 文件中添加请求信息,如下:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class VersionService {

  constructor(
    private http: HttpClient
  ) { }

  public getVersion():Observable<any> {
    return this.http.get('assets/version.json')
  }
}

要使用请求之前,要在 app.module.ts 文件挂载 HttpClientModule 模块:

import { HttpClientModule } from '@angular/common/http';

// ...

imports: [
  HttpClientModule
],

之后在组件中调用即可,这里是 app.component.ts 文件:

import { Component } from '@angular/core';
import { VersionService } from './services/version.service'; // 引入版本服务

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.less']
})
export class AppComponent {

  public version: string = '1.0.0'

  constructor(
    private readonly versionService: VersionService
  ) {}

  nGonInit() {
    this.versionService.getVersion().subscribe({
      next: (data: any) => {
        this.version = data.version // 更改版本信息
      },
      error: (error: any) => {
        console.error(error)
      }
    })
  }
}

至此,我们完成了版本信息。我们最后来调整下 package.json 的命令:

"scripts": {
  "start": "ng serve",
  "version": "node version.js",
  "commit": "node commit.js",
  "build": "ng build",
  "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"
}

使用 scripts 一是为了方便管理,而是方便 jenkins 构建方便调用。对于 jenkins 部分,感兴趣者可以自行尝试。

以上是“Angular如何结合Git Commit进行版本处理”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网JavaScript频道!

--结束END--

本文标题: Angular如何结合Git Commit进行版本处理

本文链接: https://lsjlt.com/news/96976.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Angular如何结合Git Commit进行版本处理
    这篇文章主要介绍Angular如何结合Git Commit进行版本处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!上图是页面上展示的测试环境/开发环境版本信息。后面有介绍上图表示的...
    99+
    2024-04-02
  • Python中如何使用Git进行版本控制?
    Git是一种分布式版本控制系统,常用于协作开发和管理代码的版本。Python作为一种广泛使用的编程语言,也可以与Git结合使用。本文将介绍如何在Python中使用Git进行版本控制,并提供一些示例代码。 一、安装Git 在使用Git之前,...
    99+
    2023-06-13
    git spring numpy
  • Git 中的 Java 接口:如何进行版本控制?
    Git 是一个流行的版本控制系统,可以帮助开发者更好地管理代码的版本。在 Java 开发中,接口是非常重要的一部分,因为接口定义了类之间的协议,让代码更加灵活和可维护。那么,在 Git 中如何管理 Java 接口呢?本文将会详细介绍。 Gi...
    99+
    2023-09-15
    接口 git javascript
  • 如何在Go中使用Git进行版本控制?
    Git是一个非常流行的分布式版本控制系统,很多开发者都在使用它来管理自己的代码。在Go语言中,使用Git进行版本控制也变得非常容易。本文将介绍如何在Go中使用Git进行版本控制。 一、Git的基础知识 在开始学习如何在Go中使用Git进行版...
    99+
    2023-09-14
    django git laravel
  • idea中如何使用git进行版本回退详解
    目录一、在idea中查看提交的历史记录二、复制当前最新的版本号,以及需要回退的版本号三、执行回退操作。四、提交记录中输入最新版本号五、提交到本地仓库,然后推送到远程仓库总结:一、在i...
    99+
    2023-05-14
    idea中git版本回退 idea回退代码git idea回退git版本
  • PHP版本控制中无法执行commit操作的处理方法
    PHP版本控制中无法执行commit操作的处理方法,需要具体代码示例 在日常开发中,我们经常会使用版本控制系统来管理和跟踪代码的变更,其中Git是最常用的版本控制工具之一。在使用Git...
    99+
    2024-03-04
    解决方法 php版本控制
  • 如何在JavaScript中使用Git索引进行版本控制?
    Git是目前最流行的版本控制系统之一,它能够帮助我们管理代码的版本,记录代码的修改历史,并且能够方便地进行代码的合并和回滚等操作。在JavaScript开发中,我们也经常需要使用Git来管理我们的代码,本文将介绍如何在JavaScript...
    99+
    2023-05-26
    javascript git 索引
  • 如何在Java开发中使用Git进行版本控制?
    在Java开发中,版本控制是必不可少的一环。Git是目前最流行的版本控制工具之一,它能够有效地管理代码的版本、协作开发、追踪bug等。本文将介绍如何在Java开发中使用Git进行版本控制,并提供一些实用的操作指南和示例代码。 一、安装Git...
    99+
    2023-08-05
    git 开发技术 关键字
  • Linux发行版本中如何安装git
    这篇文章给大家分享的是有关Linux发行版本中如何安装git的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。于Debian /...
    99+
    2023-06-28
  • 项目中如何根据vue版本进行差异化处理
    这篇文章主要介绍“项目中如何根据vue版本进行差异化处理”,在日常操作中,相信很多人在项目中如何根据vue版本进行差异化处理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”项目中如何根据vue版本进行差异化处理...
    99+
    2023-07-04
  • 你知道如何用Python在Git上进行版本控制吗?
    随着软件开发的进步,版本控制变得越来越重要。Git是一个流行的版本控制系统,它可以跟踪文件的变化并让用户随时回退到之前的版本。在本文中,我们将介绍如何使用Python在Git上进行版本控制。 Git的基本概念 在开始之前,我们需要了解一些G...
    99+
    2023-10-09
    git leetcode apache
  • Python 存储:如何在 Windows 上使用 Git 进行版本控制?
    Git 是一种版本控制系统,可以帮助开发者更好地管理代码。在 Windows 上使用 Git 进行版本控制,可以让你更好地跟踪代码的变化,并且可以轻松地回退到之前的版本。下面我们就来看一下如何在 Windows 上使用 Git 进行版本控...
    99+
    2023-07-07
    存储 git windows
  • 如何在Linux系统上安装Git并进行版本控制?
    作为一款开源的分布式版本控制系统,Git在软件开发行业中被广泛使用。Git的使用可以大大提高代码的可维护性和可扩展性,而且它在多人协作开发中也非常方便。在本篇文章中,我们将介绍如何在Linux系统上安装Git,并学习如何使用Git进行版本控...
    99+
    2023-11-01
    linux git spring
  • redis如何进行版本升级
    redis进行版本升级的方法:1、打开终端;2、输入命令停止redis服务;3、输入命令下载解压最新版本的redis安装包;4、输入命令切换到redis安装目录下;5、输入命令进行编译安装升级即可。具体操作步骤:打开终端命令行模式。输入“s...
    99+
    2024-04-02
  • dedecms如何进行版本查询
    本文小编为大家详细介绍“dedecms如何进行版本查询”,内容详细,步骤清晰,细节处理妥当,希望这篇“dedecms如何进行版本查询”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。dedecms版本查询方法:1、登...
    99+
    2023-07-05
  • Grafana如何进行版本升级
    要升级Grafana的版本,您可以按照以下步骤操作: 备份数据:在升级之前,建议您备份Grafana的数据和配置文件,以防意外情...
    99+
    2024-04-02
  • 如何进行DB2表结构批量处理
    这期内容当中小编将会给大家带来有关如何进行DB2表结构批量处理,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、查询所有列SELECT   &...
    99+
    2024-04-02
  • 如何使用 Git 进行 Java 项目的版本控制和协作?
    Git 是一种分布式版本控制系统,它可以帮助我们更好地管理和协作开发 Java 项目。本文将介绍如何使用 Git 进行 Java 项目的版本控制和协作。 一、Git 简介 Git 是一种分布式版本控制系统,它最初由 Linus Torval...
    99+
    2023-09-04
    git apache windows
  • Git 中的 PHP 接口和 JavaScript:如何处理版本控制?
    Git 是一个非常流行的版本控制系统,它可以跟踪您的代码的变化,并允许您在多个开发环境中协作开发。在这篇文章中,我们将讨论 Git 中 PHP 接口和 JavaScript 的使用,以及如何处理版本控制。 PHP 接口 Git 提供了一个可...
    99+
    2023-06-30
    接口 javascript git
  • Python结合spaCy 进行简易自然语言处理
    目录简介1. spaCy 简介及安装方法1.1 简介1.2 安装2. spaCy 的管道(Pipeline)与属性(Properties)2.1 Tokenization2.2 词性...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作