前端项目自动部署到服务器
一、安装依赖
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"