前端node工程 将打包好的dist文件直接上传到服务器的办法 (scp2+ssh2+ora+readline-sync)

548 阅读1分钟
  1. 项目根路径下创建upload.server.js文件,配置如下:
/*
 * @Description: gaobo
 * @Date: 2021-03-05 11:19:42
 * @FilePath: \upload.server.js
 */
// 服务器配置信息
const server = {
    host: '***.***.***.***', // 服务器ip
    port: '***', // 端口一般默认22
    username: '', // 用户名
    password: '', // 密码
    pathNmae: 'dist', // 上传到服务器的位置
    locaPath:'./dist/' // 本地打包文件的位置
}

// 引入scp2
const client = require('scp2');
const ora = require('ora');
const readline = require('readline-sync')
const spinner = ora('正在发布到服务器...');

const Client = require('ssh2').Client; // 创建shell脚本
const conn = new Client();

server.username = readline.question('username:');
server.password = readline.question('password:',{hideEchoBack: true});
console.log('正在建立连接');
conn.on('ready', function () {
    console.log('已连接')
    if(!server.pathNmae || server.pathNmae==='/'){
        console.log('连接已关闭');
        conn.end()
        return false;
    }
    // 这里我拼接了放置服务器资源目录的位置 ,首选通过rm -rf删除了这个目录下的文件
    conn.exec('rm -rf /home/' + server.pathNmae + '/*', function (err, stream) {
        console.log('删除文件');
        stream.on('close', function (code, signal) {
            console.log('开始上传')
            spinner.start();
            client.scp(server.locaPath, {
                "host": server.host,
                "port": server.port,
                "username": server.username,
                "password": server.password, 
                "path": '/home/' + server.pathNmae
            }, err => {
                spinner.stop();
                if (!err) {
                    console.log('项目上传成功');
                } else {
                    console.log("err", err)
                }
                conn.end() // 结束命令
            })
        })
    })
}).connect({
    host: server.host,
    port: server.port,
    username: server.username,
    password: server.password
    //privateKey: '' //使用 私钥密钥登录 目前测试服务器不需要用到
});
  1. powershell下执行以下指令
npm install scp2
npm install readlind-sync
npm install ssh2
node upload.server.js
  1. 也可以将上传功能集成到 package.json 中的scripts build中去,实现一键编译打包上传