前端打包发布一条龙--SCP2

1,838 阅读1分钟

背景:手动敲打命令将打包文件发布到服务器的感觉很不爽,作为21世纪的90后,本着能懒则懒的原则,决定去实现打包后自动上传服务器的功能。

依赖
scp2:一款使用JavaScript编写的基于SSH2的模拟实现
cross-env:跨平台设置和使用环境变量的脚本

安装依赖
npm install scp2 --save-dev
npm install cross-env --save-dev

yarn add scp2 --save-dev
yarn add cross-env --save-dev

实现
1.定义服务器信息:

const SERVER_INFO =
  {
    name: process.env.NODE_ENV === 'development' ? '测试环境' : '生产环境',
    host: process.env.NODE_ENV === 'development' ? '192.x.x.x' : '192.x.x.x',// ip
    port: 22,// 默认端口号
    username: 'root', // 登录服务器的账号
    password: 'xxxxxx',// 密码
    localPath: './dist',
    path: process.env.NODE_ENV === 'development' ? '/home/development/data/vue/project' : '/home/production/data/vue/project/',// 服务器存放项目路径
  }
module.exports = SERVER_INFO;

2.编写配置代码

const scpClient = require('scp2');
const ora = require('ora');
const chalk = require('chalk');
const {SERVER_INFO: serverInfo} = require('./obtainEnv');
const enviro = serverInfo.name;
const spinner = ora(
  `正在发布到${enviro}服务器...`
);
let Client = require('ssh2').Client;
let conn = new Client();
conn.on('ready', () => {
  conn.exec('rm -rf '+ serverInfo.path + '/' + '*', (e, stream) => {
    if (e) {
      throw e
    }
    stream.on('close', (code, signal) => {
      spinner.start();
      scpClient.scp(serverInfo.localPath,
        {
          host: serverInfo.host,
          username: serverInfo.username,
          port: serverInfo.port,
          password: serverInfo.password,
          path: serverInfo.path,
        },
        (err) => {
          spinner.stop();
          if (err) {
            console.log(chalk.red('发布失败.\n'));
            throw err;
          } else {
            console.log(chalk.green(`Success! 成功发布到${serverInfo['name']}服务器!`));
          }
        });
      conn.end();
    }).stdout.on('data', (data) => {
      console.log('STDOUT: ' + data);
    }).stderr.on('data', (data) => {
      console.log('STDERR: ' + data);
    })
  })
}).connect({
  host: serverInfo.host,
  port: serverInfo.port,
  username: serverInfo.username,
  password: serverInfo.password
})

3.package.json中加上命令代码:

1635475813(1).png 4.执行 npm run dev-deploy 命令: 首先会执行npm run dev-build,将本地文件进行打包,再将打包后的文件上传到服务器上:

1635476238(1).png 查看运行的输出结果,总耗时32.69s,是不是节省了很多时间成本了

注意点
在发布之前执行rm -rf命令时,建议先拿一个测试文件进行测试,避免因路径错误,删除其他重要文件,否则,就跑路吧(rf: run fast),跑快点!

最后,喝酒烫头骑马蹦迪!!!