根据不同的应用场景,打包之前可以把代码手动或自动推送到远端,防止代码丢失
每次打包之后,记录打包的时间、commitId等信息
"scripts": {
"start": "node scripts/start.js",
"build": "node scripts/build.js",
"buildInfo": "node scripts/buildInfo.js",
"test": "node scripts/test.js"
},
/**
* 打包之前可以把代码都推送到远端,防止代码丢失
* 每次打包之后,记录打包的时间、commitId等信息
*/
// Do this as the first thing so that any code reading it knows the right env.
process.env.BABEL_ENV = 'production';
process.env.NODE_ENV = 'production';
var moment = require('moment') // todo 需要安装这个依赖
var async = require('async')
var exec = require('child_process').exec
var fs = require('fs')
var assetsFileName = ''
var commitId = ''
var date = moment.utc()
var version = date.format('YYYY-MM-DDTHH:mm:ss') + 'Z'
var releaseTag = date.format('YYYY-MM-DDTHH-mm-ss') + 'Z'
var buildType = 'production'
const rmDir = function(dirPath) {
try { var files = fs.readdirSync(dirPath); }
catch(e) { return; }
if (files.length > 0)
for (var i = 0; i < files.length; i++) {
var filePath = dirPath + '/' + files[i];
if (fs.statSync(filePath).isFile())
fs.unlinkSync(filePath);
else
rmDir(filePath);
}
fs.rmdirSync(dirPath);
};
async.waterfall([
function(cb) {
rmDir('build');
// var cmd = 'webpack -p --config webpack.production.config.js'
var cmd = 'node scripts/build.js' //todo 改成对应项目的打包命令
console.log('Running', cmd)
exec(cmd, cb)
},
function(stdout, stderr, cb) {
var cmd = 'git log --format="%H" -n1'
console.log('Running', cmd)
exec(cmd, cb)
},
function(stdout, stderr, cb) {
console.log('stdout',stdout)
if (!stdout) throw new Error('commitId is empty')
commitId = stdout.replace('\n', '')
if (commitId.length !== 40) throw new Error('commitId invalid : ' + commitId)
assetsFileName = 'ui-assets-release.txt';
fs.appendFileSync(assetsFileName, '\n')
fs.appendFileSync(assetsFileName, 'var UIReleaseTag = "' + buildType + '.' +
releaseTag + '"\n')
fs.appendFileSync(assetsFileName, 'var UICommitID = "' + commitId + '"\n')
fs.appendFileSync(assetsFileName, 'var UIVersion = "' + version + '"')
fs.appendFileSync(assetsFileName, '\n')
console.log('UI assets file :', assetsFileName)
cb()
}
], function(err) {
if (err) return console.log(err)
})
- 打包并记录打包时间到ui-assets-release.txt文件
npm run buildInfo
☁ my-app [master] ⚡ npm run buildInfo
> my-app@0.1.0 buildTag /***/my-app
> node scripts/buildInfo.js
Running node scripts/build.js
Running git log --format="%H" -n1
stdout 3d9a619cfd60120f2e94a89ffa3a5ff53162a837
UI assets file : ui-assets-release.txt
☁ my-app [master] ⚡
var UIReleaseTag = "production.2021-01-04T07-53-59Z"
var UICommitID = "3d9a619cfd60120f2e94a89ffa3a5ff53162a837"
var UIVersion = "2021-01-04T07:53:59Z"
网友评论