node使用ora丰富命令行并使用node-ssh连接服务器
今天是使用ora丰富命令行的动画,实现连接服务器并传输文件的功能。(你可能需要阅读之前的文章,来提高理解)
ora模块
安装
pnpm add ora
修改init命令
修改index.ts
新增-ng
参数, 将生成的文件名追加到.gitignore
文件中, 避免服务器密码参数上传git
。
// init
program
.command("init")
.description("初始化配置文件")
.option("-ng, --nogit", "将配置文件添加到.gitignore文件")
.action(createJSON);
修改init.ts
文件中的createJSON
函数(之前将createJSON
拼错了,刚改过来),当nogit
参数为true
时 对 .gitignore
追加 deploy-config.json
, 屏蔽deploy-config.json
文件。openSync
的第二个参数为a
时, 没有.gitignore
文件, 会自动生成 .gitignore
文件。
createJSON(options: Record<string, boolean>) {
let spinner = ora();
spinner.succeed(chalk.green("开始创建配置文件"));
writeFile("deploy-config.json", JSON.stringify(config), (err) => {
if (err) {
console.log(chalk.red(err));
return;
}
spinner.succeed(chalk.green("配置文件创建完成"));
if (options.nogit) {
spinner.succeed(chalk.green("开始追加文件名至.gitignore"));
try {
const gitignore = openSync(".gitignore", "a");
writeSync(gitignore, "deploy-config.json\n");
spinner.succeed(chalk.green("追加完成"));
} catch (error) {
spinner.fail(error as string);
}
}
spinner.clear();
});
}
node-ssh
安装
pnpm add node-ssh
pnpm add ssh2
pnpm add @types/ssh2 -D
修改配置文件的相关操作
type
在src
文件夹下新建types
文件夹, types
文件夹下新增type.d.ts
声明文件。
import { Config } from "node-ssh";
interface DeployConfig extends Config {
localFile: string; // 本地文件
remoteFile: string; // 远程文件
}
修改 init.ts
根据 node-ssh
连接服务器所需要的参数生成 deploy-config.json
文件。
import { DeployConfig } from "./types/type";
const config: DeployConfig = {
host: "localhost",
username: "",
password: "",
localFile: "",
remoteFile: ""
};
新增连接
新增 ssh.ts
文件。linkServer
函数会在连接时读取当前的配置文件,需要确保服务器支持shh
服务。 默认端口为22
.
/*
* @Author: Aisanyi
* @Date: 2022-04-06 11:17:11
* @LastEditors: Aisanyi
* @LastEditTime: 2022-04-06 16:17:51
* @Description: 连接服务器
*/
import chalk from "chalk";
import { NodeSSH } from "node-ssh";
import ora from "ora";
import { readConfig } from "./readconfig.js";
export async function linkServer() {
const config = readConfig();
let spinner = ora();
const ssh = new NodeSSH();
spinner.start(chalk.blue("正在连接服务器"));
ssh
.connect({
...config,
})
.then(async (nodeSSH) => {
spinner.succeed(chalk.green("服务器连接成功"));
spinner.start(chalk.blue("开始上传文件"));
const putres = await nodeSSH.putDirectory(
config.localFile,
config.remoteFile
);
if (putres) {
spinner.succeed(chalk.green("文件上传成功"));
} else {
spinner.fail(chalk.red("文件上传失败"));
}
nodeSSH.connection?.destroy()
})
.catch((err) => {
spinner.fail(chalk.red("服务器连接失败"));
console.log(chalk.bgRed(err));
})
.finally(() => {
spinner.clear();
});
}
新增命令 go
在index.ts
中新增:
import { linkServer } from "./ssh.js";
// go
program
.command("go")
.description("项目部署")
.action(linkServer);
测试
运行
pnpm test
。
生成配置文件
运行 deploy-cli init -ng
。
修改deploy-conifg.json
我连接的服务器系统为window server 2019
,openSSH
支持可以根据微软的文档操作: docs.microsoft.com/zh-cn/windo…。
运行go命令
运行
deploy-cli go
。
服务器上也发现了上传的文件
转载自:https://juejin.cn/post/7083416140734693383