使用shelljs和ssh2-sftp-client实现前端一键打包部署服务器

由于现在打包项目部署服务器是前端完成, 之前通过FTP或者SCP等软件完成上传,又或者是交给后端通过git推送拉取来部署, 几个服务器就要重复几遍操作, 感觉很麻烦, 所以找到了这种办法! 分享一下。

一、shelljsssh2-sftp-client

ShellJS

ShellJS是基于Node.js API的Unix shell命令的可移植(Windows/Linux/macOS)实现。您可以使用它来消除shell脚本对Unix的依赖,同时仍然保留其熟悉而强大的命令。您也可以全局安装它,这样您就可以在Node项目外部运行它。

ssh2-sftp-client

ssh2-sftp-client是一个用于node.js的SFTP客户端,一个围绕SSH2的包装器,它提供了一个高层次的方便抽象和一个基于Promise的API。

什么?你说你看不懂? 没关系, 因为我也看不懂...

shelljs这个库能够让我们在js文件中执行shell命令。shelljs做的事就是自动化,从耗时的重复性常规动作里解放出来,提升开发效率和工作心情(奇怪工作能有什么心情...)。

ssh2-sftp-client是一个用于在Node.js中进行SSH文件传输的库。用于连接到远程服务器并执行各种文件传输操作,如上传、下载、删除和重命名文件等。

二、使用

1.首先安装 shelljs 和 ssh2-sftp-client

npm i shelljs ssh2-sftp-client --save-dev

2.新建文件夹(如:upload), 然后文件夹里新建config.js用来存放服务器的配置和index.js用来存放上传脚本的代码
3.config.js中导出服务器的配置
JavaScript 复制代码
module.exports = [
  {
    ip: "xx.xxx.xxx.xxx",//服务器ip地址
    username: '',//ssh用户名
    port: '',//ssh端口号
    password: '',//ssh密码
    path: '如: /data/abc/xxx',//操作文件夹的配置地址路径
    rmovepath: '/data/abc/xxx'//删除文件夹的配置地址路径
  }
];

配置好服务器之后, 我们去写index.js

4.index.js

这里面由于我不需要备份所以第一个then被注释掉了

下面是connect方法的其他配置项

  • host:SFTP服务器的主机名或IP地址。
  • port:SFTP服务器的端口号,默认为22。
  • username:连接SFTP服务器的用户名。
  • password:连接SFTP服务器的密码。
  • privateKey:连接SFTP服务器的私钥文件路径。
  • passphrase:私钥文件的密码(如果有)。
  • agent:SSH代理的套接字路径。
  • agentForward:是否启用SSH代理转发。
  • localHostname:本地主机名。
  • localUsername:本地用户名。
  • tryKeyboard:是否尝试使用键盘交互进行身份验证。
  • keepaliveInterval:保持活动连接的间隔时间(以毫秒为单位)。
  • keepaliveCountMax:保持活动连接的最大尝试次数。
  • readyTimeout:等待SFTP服务器准备就绪的超时时间(以毫秒为单位)。
  • debug:是否启用调试模式。
5.这里要说一下有私钥的情况!

如果上传服务器时需要认证私钥, 请先将私钥文件(如:id_rsa)转换为.pem文件, 不然会报错, 然后在connect方法中加入对应的配置, 如下:

准备好.pem文件,如下:

然后在connect中加入参数即可,如下:

4.执行命令

你可以选择在package.json中添加命令, 然后可以使用VSCode一键运行 如下:

也可以选择直接在终端里输入node upload/index.js运行

三、注意!!!

最后的最后的最后, 如果你的项目需要上传到gitee等远程仓库,请一定要忽略掉关于服务器的配置的文件, 不然...

.gitignore中添加对应的文件夹/文件即可

到这里, 此次分享就结束了, 如有错误的地方, 欢迎指出,我会加以改正!:)

相关推荐
小兵张健4 小时前
价值1000的 AI 工作流:Codex 通用前端协作模式
前端·aigc·ai编程
sunny_4 小时前
面试踩大坑!同一段 Node.js 代码,CJS 和 ESM 的执行顺序居然是反的?!99% 的人都答错了
前端·面试·node.js
拉不动的猪4 小时前
移动端调试工具VConsole初始化时的加载阻塞问题
前端·javascript·微信小程序
ayqy贾杰6 小时前
Agent First Engineering
前端·vue.js·面试
IT_陈寒6 小时前
SpringBoot实战:5个让你的API性能翻倍的隐藏技巧
前端·人工智能·后端
iceiceiceice7 小时前
iOS PDF阅读器段评实现:如何从 PDFSelection 精准还原一个自然段
前端·人工智能·ios
大金乄7 小时前
封装一个vue2的elementUI 表格组件(包含表格编辑以及多级表头)
前端·javascript
葡萄城技术团队7 小时前
【性能优化篇】面对万行数据也不卡顿?揭秘协同服务器的“片段机制 (Fragments)”
前端
程序员阿峰8 小时前
2026前端必备:TensorFlow.js,浏览器里的AI引擎,不写Python也能玩转智能
前端
Jans8 小时前
Shipfe — Rust 写的前端静态部署工具:一条命令上线 + 零停机 + 可回滚 + 自动清理
前端