共计 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"
正文完
发表至: javascript
2020-07-01