基于node一键发布到服务器的js脚本

基于node一键将打包后的前端文件发布到服务器指定目录的js脚本

需要使用node的2个包

javascript 复制代码
npm install ssh2 scp2

基于node进行ssh连接的控件

下面直接贴代码,已经在代码中加了注释

javascript 复制代码
const { exec } = require('child_process');
const { Client } = require('ssh2');
const scpClient = require('scp2');
const path = require('path');

const conn = new Client();

const serverConfig = {
  host: '192.168.3.68',
  port: 22,
  username: 'root',
  password: 'Fdkj@111' // 或者使用 privateKey: require('fs').readFileSync('/path/to/your/private/key')
};

const localDistPath =  path.resolve(__dirname, 'dist'); // 本地dist文件夹路径
const remotePath = '/home/dockerdata/nginx/www/ytkzweb'; // 远程服务器的目标文件夹路径

// 打包命令
const buildCommand = 'npm run build'; 

console.log('开始打包...');

exec(buildCommand, (err, stdout, stderr) => {
  if (err) {
    console.error(`Build failed: ${err.message}`);
    console.error(stderr);
    return;
  }
  conn.on('ready', () => {
    console.log('服务器连接成功!');
    // 清空目标文件夹
    conn.exec(`rm -rf ${remotePath}/*`, (err, stream) => {
      if (err) {
        console.error('Error executing command:', err);
        throw err;
      }

      stream.on('close', (code, signal) => {
        
        if (code !== 0) {
          console.error(`Failed to clear remote directory. Code: ${code}, Signal: ${signal}`);
          conn.end();
          return;
        }
        console.log('清除远程目录成功!');
        console.log('开始传输文件...');
        // 传输文件
        scpClient.scp(localDistPath, {
          host: serverConfig.host,
          username: serverConfig.username,
          password: serverConfig.password,
          path: remotePath
        }, (err) => {
          if (err) {
            console.error('Error:', err);
          } else {
            console.log('文件传输成功!');
          }
          conn.end();
        });
      }).stderr.on('data', (data) => {
        console.error('STDERR:', data.toString());
      });

      // 必须要加,否则stream流的close方法不走
      stream.on('data', (data) => {
        console.log('STDOUT:', data.toString());
      });
      
    });
  }).on('error', (err) => {
    console.error('SSH Connection Error:', err);
  }).connect(serverConfig);
});

注意 注意 注意

javascript 复制代码
stream.on('data', (data) => {
 console.log('STDOUT:', data.toString());
});

这块代码,一定要加

以上

相关推荐
半夏知半秋8 分钟前
Python中的OS库
服务器·开发语言·笔记·后端·python·学习
Swift社区21 分钟前
基于 GitHub Actions 的流程自动化实践
运维·自动化·github
sin220133 分钟前
配置嵌入式服务器
运维·服务器
前端熊猫37 分钟前
video.js视频播放上手
javascript·音视频·video.js
confident341 分钟前
阶梯费用计算demo
java·前端·javascript
王磊鑫1 小时前
计算机网络基础(7)中科大郑铨老师笔记
服务器·笔记·计算机网络
互联网资讯1 小时前
抖音生活服务商系统源码如何搭建?
大数据·运维·本地生活服务商系统·本地生活服务商系统源码
OopspoO2 小时前
Linux修改磁盘UUID
linux·运维
金牛IT2 小时前
MySQL 3主集群搭建
linux·运维·自动化·监控
screct_demo2 小时前
详细讲一下Prettier对我们日常开发的作用,以及详细用法
前端·javascript·es6