当前位置: 首页 > article >正文

ssh2-sftp-client一键将你的前端项目部署到远程服务器,你只需要专注写bug就好了

当你的项目完成差不多了,要发到线上了,你的常规操作是什么?

  • npm run build
  • 打开 xftp 软件
  • 进入相应的目录
  • 删除现存的 html 目录
  • 把打包出来的 dist重命名为 `html
  • 在 xftp 上传新打包的目录

看完以上流程,操作一次两次还好,但是日积月累下来,你的生命会被它折腾的没有意义,当然,你可能也会想到使用github action或者gitlab runner或者docker等云端部署,但是当你遇到你不是服务器的root管理员,又遇到node版本不能升级等问题,估计你也会被搞得很心累吧,所以这里就推荐最后一招,直接模拟人工操作。

ssh2-sftp-client 是什么?

ssh2-sftp-client 为node.js基于ssh2封装的,SFTP客户端

三个关键词:

  1. node.js:OK,这是目前几乎所有前端都会用到的一门语言,你也不例外。
  2. ssh2: 这里的ssh2不是指协议,而是指一个 node.jsssh2 client(ssh2客户端)的实现:GitHub - mscdex/ssh2: SSH2 client and server modules written in pure JavaScript for node.js
  3. SFTP客户端: SSH File Transfer Protocol的缩写,安全文件传送协议

简单来说:
ssh2-sftp-client 基于 ssh2 库进行了封装,让 文件传输 相关的方法变得更为简洁,还支持了 Promise

这就是为什么我推荐 ssh2-sftp-client,而不是直接使用 ssh2,因为它在文件传输这件事上——对开发者而言,更友好!

怎么实现自动部署?

1.安装

npm install ssh2-sftp-client -dev
# or
yarn add ssh2-sftp-client -D

2.写脚本

在项目根目录创建publish.js脚本,黏贴一下代码,并且修改服务器地址和用户名密码等信息,最后修改将哪个文件夹上传到服务器的什么位置

const { exec } = require('child_process')
const Client = require('ssh2-sftp-client')
const sftp = new Client()

// Step 1: Run the build command
console.log('Starting build process...')
exec('pnpm run test:testjp', (error, stdout, stderr) => {
    if (error) {
        console.error(`Build error: ${error.message}`)
        return
    }
    if (stderr) {
        console.error(`Build stderr: ${stderr}`)
    }
    console.log(`Build stdout: ${stdout}`)
    console.log('Build process complete.')

    // Step 2: Upload the dist folder to the server
    sftp.connect({
        host: '服务器地址',
        port: '22',
        username: '用户名',
        password: '密码',
    })
        .then(() => {
            console.log('Connected to server. start uploading...')
            return sftp.uploadDir('dist', '/home/服务器地址')
        })
        .then(() => {
            console.log('Upload complete.')
            return sftp.end()
        })
        .catch((err) => {
            console.error(`Upload error: ${err.message}`)
        })
})

3.执行

在package.json的scripts标签中加入一条:

"deploy": "node ./deploy.js"

这样,在你执行完 yarn build 之后,只需要执行一下 yarn deploy,你的构建产物就能  地一声传到远程服务器的目标路径啦~

注意事项

任何时候,把你的账号密码 git commit 都是一件危险的事情。

所以,在 项目根目录 下创建 .auth/ftp.json 文件,并把它加入 .gitignore:

其中,ftp.json 用来存储你的敏感信息:

{
  "host": "139.9.1xx.xxx",
  "port": 22,
  "user": "root",
  "password": "**********"
}

然后,在你的脚本文件 scripts/deploy.js 中引入 json,而不是 硬编码 的方式记录 账号密码ip

const config = require('../.auth/ftp.json')
await sftp.connect(config) // 很重要!万事安全第一!


http://www.kler.cn/a/389188.html

相关文章:

  • LabVIEW开发相机与显微镜自动对焦功能
  • Android OpenGL ES详解——立方体贴图
  • 深度学习代码笔记
  • 机器情绪及抑郁症算法
  • 小面馆叫号取餐流程 佳易王面馆米线店点餐叫号管理系统操作教程
  • 【计算机网络】Socket编程接口
  • Rust:GUI 开源框架
  • 数据库范式、MySQL 架构、算法与树的深入解析
  • 实现rtos操作系统 【二】基本任务切换实现
  • 大模型,智能家居的春秋战国之交
  • goframe开发一个企业网站 验证码17
  • DotNet使用CsvHelper快速读取和写入CSV文件的操作方法
  • Apache DolphinScheduler + OceanBase,搭建分布式大数据调度平台的实践
  • 2411d,右值与移动
  • linux入门教程:perl库
  • 【刷题12】ctfshow刷题
  • 面试官:进程与线程的关系和区别到底是什么?
  • 大数据学习10之Hive高级
  • 【从零开始的LeetCode-算法】540. 有序数组中的单一元素
  • 营收增长,净利润却暴跌695.9%,昆仑万维在赌什么?
  • 后端-内连接(INNER JOIN),左外连接(LEFT JOIN)和右外连接(RIGHT JOIN)的区别
  • 【Vue】-组件开发-一个树组件
  • jpeg2000dataset.cpp:40:10: fatal error:
  • 【网络安全】Java线程安全及非线程安全
  • 使用GPT-SoVITS训练语音模型
  • 浅谈C++ MFC