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

7次阅读

共计 1925 个字符,预计需要花费 5 分钟才能阅读完成。

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

一、安装依赖

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"
正文完
 0