前端项目自动部署到服务器

一、安装依赖

npm install cross-env scp2 ssh2 -D或者yarn add cross-env scp2 ssh2 -D

二、在项目根目录新建 deploy 文件夹在文件夹里席间含 index.js 和 products.js 文件

//  deploy/index.js里面const scpClient = require("scp2");const ora = require("ora");const chalk = require("chalk");const server = require("./products");const spinner = ora(  "正在发布到" +    (process.env.NODE_ENV === "prod" ? "生产" : "测试") +    "服务器...");var Client = require("ssh2").Client;var conn = new Client();conn  .on("ready", function () {    // rm 删除服务器已存在文件夹    conn.exec("rm -rf 服务器文件夹", function (err, stream) {      if (err) throw err;      stream        .on("close", function (code, signal) {          // 在执行shell命令后,把开始上传部署项目代码放到这里面          spinner.start();          //dist 本地编译后文件夹          scpClient.scp(            "dist/",            {              host: server.host,              port: server.port,              username: server.username,              path: server.path,              // 使用本地的私钥或者password登录服务器              // password: server.password,              // privateKey: require('fs').readFileSync('/Users/ngto/.ssh/id_rsa')            },            function (err) {              spinner.stop();              if (err) {                console.log(chalk.red("发布失败.\n"));                throw err;              } else {                console.log(                  chalk.green(                    "Success! 成功发布到" +                      (process.env.NODE_ENV === "prod" ? "生产" : "测试") +                      "服务器! \n"                  )                );              }            }          );          conn.end();        })        .on("data", function (data) {          console.log("STDOUT: " + data);        })        .stderr.on("data", function (data) {          console.log("STDERR: " + data);        });    });  })  .connect({    host: server.host,    port: server.port,    username: server.username,    // 使用本地的私钥或者password登录服务器    // password: server.password,    // privateKey: require('fs').readFileSync('/Users/ngto/.ssh/id_rsa')  });
//    deploy/products.js/* *读取env变量判断发布环境 */const SERVER_ID = process.env.NODE_ENV === 'prod' ? 1 : 0;// 1:正式、0:测试/* *定义多个服务器账号 及 根据 SERVER_ID 导出当前环境服务器账号 */const SERVER_LIST = [  {    id: 0,    name: '',//项目名称    domain: '',// 域名    host: '',// ip    port: '',// 端口    username: 'root', // 登录服务器的账号    password: '',// 登录服务器的密码    path: ''// 发布至静态服务器的项目路径  },  {    id: 1,    name: '',//项目名称    domain: '',// 域名    host: '',// ip    port: ,// 端口    username: '', // 登录服务器的账号    password: '',// 登录服务器的密码    path: ''// 发布至静态服务器的项目路径  }];module.exports = SERVER_LIST[SERVER_ID];

三、在package.json中的scripts标签下加入以下标签

    "deploy:dev": "npm run build &&  cross-env NODE_ENV=dev node ./deploy",    "deploy:prod": "npm run build && cross-env NODE_ENV=prod node ./deploy"