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

这块代码,一定要加

以上

相关推荐
前端熊猫21 分钟前
React第一个项目
前端·javascript·react.js
可别是个可爱鬼27 分钟前
黑马智数Day7
前端·javascript·vue.js
花生的酱37 分钟前
DHCP原理与配置
linux·运维·网络·智能路由器
QTX1873041 分钟前
前端基础的讲解-JS(10)
开发语言·前端·javascript
网络安全-海哥1 小时前
【VLANPWN】一款针对VLAN的安全研究和渗透测试工具
开发语言·javascript·安全·ecmascript·php·网安入门
whyfail1 小时前
ESM 与 CommonJS:JavaScript 模块化的两大主流方式
javascript·node.js
CodeCraft Studio1 小时前
「实战应用」如何可视化 DHTMLX Scheduler 中的资源工作量?
javascript·ui·数据可视化
dntktop1 小时前
告别系统限制,一键关闭Windows Defender
运维
熊的猫1 小时前
ES6 中 Map 和 Set
前端·javascript·vue.js·chrome·webpack·node.js·es6