用node.js做一点微小的自动化工作

350 阅读1分钟

先说需求:

我是用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'));
}