使用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中添加对应的文件夹/文件即可

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

相关推荐
子兮曰2 小时前
async/await高级模式:async迭代器、错误边界与并发控制
前端·javascript·github
恋猫de小郭2 小时前
2026 Flutter VS React Native ,同时在 AI 时代 VS Native 开发,你没见过的版本
android·前端·flutter
GIS之路4 小时前
ArcGIS Pro 中的 Notebooks 入门
前端
IT_陈寒5 小时前
React状态管理终极对决:Redux vs Context API谁更胜一筹?
前端·人工智能·后端
Kagol6 小时前
TinyVue 支持 Skills 啦!现在你可以让 AI 使用 TinyVue 组件搭建项目
前端·agent·ai编程
柳杉6 小时前
从零打造 AI 全球趋势监测大屏
前端·javascript·aigc
simple_lau6 小时前
Cursor配置MasterGo MCP:一键读取设计稿生成高还原度前端代码
前端·javascript·vue.js
睡不着先生7 小时前
如何设计一个真正可扩展的表单生成器?
前端·javascript·vue.js
天蓝色的鱼鱼7 小时前
模块化与组件化:90%的前端开发者都没搞懂的本质区别
前端·架构·代码规范
明君879977 小时前
Flutter 如何给图片添加多行文字水印
前端·flutter