豫ICP备2024044691号-1
powered by emlog
前端自动化部署脚本
Mins 2024-09-21 nodejs

代码如下

const chokidar = require('chokidar');
const { exec } = require('child_process');
const axios = require('axios');
const path = require('path');
const fs = require('fs-extra');

// 监听文件变动
const watcher = chokidar.watch('your/project/directory/**/*', {
    persistent: true
});

const Status = {
    Touch: 'touch',
    Check: 'check',
    Pull: 'pull',
    Build: 'build',
    Finish: 'finish'
}

// 监听 git push 操作
const watchGitPush = () => {
    exec('git rev-parse --is-inside-work-tree', async (err) => {
        await setStatus(Status.Touch);
        await setStatus(Status.Check);
        await setStatus(Status.Pull);
        exec('git pull', async (err) => {
            await setStatus(Status.Build);
            runBuild();
        });
    });
};

// 执行 npm run build
const runBuild = () => {
    exec('npm run build', async (err, stdout, stderr) => {
        copyDist();
    });
};

// 复制 dist 目录
const copyDist = () => {
    const source = path.join(__dirname, 'dist');
    const destination = '/www/html';
    fs.copy(source, destination)
        .then(async () => {
            console.log('Copied dist to /www/html');
            await setStatus(Status.Finish);
        })
        .catch(err => {
            console.error('Error copying dist:', err);
        });
};

// 通知前台
const setStatus = (status) => {
    return axios.get(`https://mins.xuxiangbo.com/automation/build?p=1&status=${status}`);
};

// 启动监听
// watcher.on('change', (filePath) => {
//   console.log(`File ${filePath} has been changed`);
//   runBuild();
// });

// 启动 git push 监听
watchGitPush();