先说需求:
我是用taro框架来开发小程序和H5,打包的H5需要引用一个微信授权的文件,我司有很多前端项目,最终的打包文件都统一放到一个dist目录下。
本来要分7步的:
- 打包 npm run build:h5 (生成 ./dist 目录)
- 将微信授权文件(./index-wx-auth.js)手动放置 打包目录(./dist)下
- git pull公共的打包文件放置目录(../dist)
- 将打包的(./dist)目录里的文件移到公共的打包目录(../dist/mall)
- git add 公共的打包文件放置目录(../dist)
- git commit
- git push
最终实现:
只需要执行命令 npm run build:git 就完成上述操作
上代码
package.json
"scripts": {
"build:git": "taro build --type h5 && node dist-git -move && node dist-git -git"
},
dist-git.js
const fs = require('fs-extra');
const path = require('path');
const DistGitDir = path.join('../dist');
const git = require('simple-git')(DistGitDir);
// 获取命令行参数
const params = process.argv.slice(2);
const isMove = params.includes('-move');
const isGit = params.includes('-git');
if (isMove) {
console.log('执行命令:node dist-git -move')
moveHandle()
}
if (isGit) {
console.log('执行命令:node dist-git -git')
gitHandle()
}
/**
* 拉取dist 复制文件夹和微信授权文件
*/
function moveHandle() {
const CurrentDir = path.join('dist');
const TargetDir = path.join(DistGitDir, 'mall');
const WxAuthFile = 'index-wx-auth.js'
console.log(`git start pull ${DistGitDir}`)
git.pull(() => {
console.log(`git pull done and start empty ${TargetDir}`)
// 清空目标目录
fs.emptyDirSync(TargetDir)
// 复制目录
console.log(`start copy file ${CurrentDir} to ${TargetDir}`)
fs.copy(CurrentDir, TargetDir)
// 复制文件
fs.copy(path.join(WxAuthFile), path.join(TargetDir, WxAuthFile))
})
}
/**
* 提交dist
*/
function gitHandle() {
console.log('start git handle')
let currentTime = new Date().toLocaleString().replace(/[-:\s]+/g, '')
git.add('./*', () => console.log('git add done'))
.commit(`auto push at ${currentTime}`, () => console.log('git commit done'))
.push(['-u', 'origin', 'master'], () => console.log('git push done'));
}