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

这块代码,一定要加

以上

相关推荐
Neptune112 分钟前
JavaScript回归基本功之---类型判断--typeof篇
前端·javascript·面试
进击的尘埃22 分钟前
微前端沙箱隔离:qiankun 和 wujie 到底在争什么
javascript
子兮曰1 小时前
后端字段又改了?我撸了一个 BFF 数据适配器,从此再也不怕接口“屎山”!
前端·javascript·架构
颜酱4 小时前
一步步实现字符串计算器:从「转整数」到「带括号与优化」
javascript·后端·算法
比尔盖茨的大脑4 小时前
事件循环底层原理:从 V8 引擎到浏览器实现
前端·javascript·面试
卓卓不是桌桌4 小时前
如何优雅地处理 iframe 跨域通信?这是我的开源方案
javascript·架构
滕青山4 小时前
腾讯域名拦截查询 在线工具核心JS实现
前端·javascript·vue.js
进击的尘埃4 小时前
TypeScript 协变与逆变:你的泛型组件 Props 为什么总是类型报错?
javascript
helloweilei4 小时前
javascript 结构化克隆
javascript·node.js
龙猫不热4 小时前
从 0 手写 Promise:拆解 Promise 链式调用的实现原理
前端·javascript·面试