基于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());
});

这块代码,一定要加

以上

相关推荐
Maple_land23 分钟前
Linux进程第八讲——进程状态全景解析(二):从阻塞到消亡的完整生命周期
linux·运维·服务器·c++·centos
爱吃生蚝的于勒28 分钟前
【Linux】零基础学会Linux之权限
linux·运维·服务器·数据结构·git·算法·github
量子物理学30 分钟前
Eclipse Mosquitto 在小内存下怎么修改配置文件
java·服务器·eclipse
Cyan_RA91 小时前
Linux 远程Ubuntu服务器本地部署大模型 EmoLLM 中常见的问题及解决方案 万字详解
linux·运维·服务器·ubuntu·大模型·远程部署·emollm
FuckPatience1 小时前
Vue ASP.Net Core WebApi 前后端传参
前端·javascript·vue.js
数字冰雹1 小时前
图观 流渲染打包服务器
服务器·前端·github·数据可视化
minji...1 小时前
Linux相关工具vim/gcc/g++/gdb/cgdb的使用详解
linux·运维·服务器·c++·git·自动化·vim
web安全工具库1 小时前
Linux 高手进阶:Vim 核心模式与分屏操作详解
linux·运维·服务器·前端·数据库
一枚前端小能手1 小时前
🔥 SSR服务端渲染实战技巧 - 从零到一构建高性能全栈应用
前端·javascript
Komorebi_99991 小时前
Vue3 provide/inject 详细组件关系说明
前端·javascript·vue.js