You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
constexecSync=require('child_process').execSync;constfs=require('fs')consttargetFile='src/assets/version.json';// 存储到的目标文件constcommit=execSync('git show -s --format=%h').toString().trim();//当前提交的版本号,hash 值的前7位letdate=newDate(execSync('git show -s --format=%cd').toString());// 日期letmessage=execSync('git show -s --format=%s').toString().trim();// 说明letversionObj={"commit": commit,"date": date,"message": message};constdata=JSON.stringify(versionObj);fs.writeFile(targetFile,data,(err)=>{if(err){throwerr}console.log('Stringify Json data is saved.')})
我们在 package.json 上加上命令行方便管理:
"scripts": {
"version": "node version.js"
}
根据环境生成版本信息
针对不同的环境生成不同的版本信息,假设我们这里有开发环境 development,生产环境 production 和车测试环境 test。
constexecSync=require('child_process').execSync;constfs=require('fs')consttargetFile='src/assets/version.json';// 存储到的目标文件constconfig=require('./config/default.json');constcommit=execSync('git show -s --format=%h').toString().trim();//当前提交的版本号letdate=newDate(execSync('git show -s --format=%cd').toString());// 日期letmessage=execSync('git show -s --format=%s').toString().trim();// 说明letversionObj={"env": config.env,"version": "","commit": commit,"date": date,"message": message};// 格式化日期constformatDay=(date)=>{letformatted_date=date.getFullYear()+"."+(date.getMonth()+1)+"."+date.getDate()returnformatted_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}`}constdata=JSON.stringify(versionObj);fs.writeFile(targetFile,data,(err)=>{if(err){throwerr}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",
}
上图是页面上展示的
测试环境/开发环境
版本信息。上图表示的是每次提交的
Git Commit
的信息,当然,这里我是每次提交都记录,你可以在每次构建的时候记录。So,我们接下来用
Angular
实现下效果,React
和Vue
同理。搭建环境
因为这里的重点不是搭建环境,我们直接用
angular-cli
脚手架直接生成一个项目就可以了。Step 1: 安装脚手架工具
Step 2: 创建一个项目
# ng new PROJECT_NAME ng new ng-commit
Step 3: 运行项目
项目运行起来,默认监听
4200
端口,直接在浏览器打开http://localhost:4200/
就行了。此时,
ng-commit
项目重点文件夹src
的组成如下:上面目录结构,我们后面会在
app
目录下增加services
服务目录,和assets
目录下的version.json
文件。记录每次提交的信息
在根目录创建一个文件
version.txt
,用于存储提交的信息;在根目录创建一个文件commit.js
,用于操作提交信息。重点在
commit.js
,我们直接进入主题:上面的文件可以直接通过
node commit.js
进行。为了方便管理,我们在package.json
上加上命令行:那样,使用
npm run commit
同等node commit.js
的效果。生成版本信息
有了上面的铺垫,我们可以通过
commit
的信息,生成指定格式的版本信息version.json
了。在根目录中新建文件
version.js
用来生成版本的数据。我们在
package.json
上加上命令行方便管理:根据环境生成版本信息
针对不同的环境生成不同的版本信息,假设我们这里有开发环境
development
,生产环境production
和车测试环境test
。major.minor.patch
,如:1.1.0major.minor.patch:beta
,如:1.1.0:betamajor.minor.path-data:hash
,如:1.1.0-2022.01.01:4rtr5rg方便管理不同环境,我们在项目的根目录中新建文件如下:
相关的文件内容如下:
default.json
根据命令行拷贝不同环境的配置信息,在package.json
中配置下:Is easy Bro, right?
整合生成版本信息的内容,得到根据不同环境生成不同的版本信息,具体代码如下:
在
package.json
中添加不同环境的命令行:生成的版本信息会直接存放在
assets
中,具体路径为src/assets/version.json
。结合 Angular 在页面中展示版本信息
最后一步,在页面中展示版本信息,这里是跟
angular
结合。使用
ng generate service version
在app/services
目录中生成version
服务。在生成的version.service.ts
文件中添加请求信息,如下:要使用请求之前,要在
app.module.ts
文件挂载HttpClientModule
模块:之后在组件中调用即可,这里是
app.component.ts
文件:至此,我们完成了版本信息。我们最后来调整下
package.json
的命令:使用
scripts
一是为了方便管理,而是方便jenkins
构建方便调用。对于jenkins
部分,感兴趣者可以自行尝试。参考于后话
The text was updated successfully, but these errors were encountered: