惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Latest
Security Latest
Recorded Future
Recorded Future
人人都是产品经理
人人都是产品经理
S
SegmentFault 最新的问题
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
P
Privacy & Cybersecurity Law Blog
WordPress大学
WordPress大学
Know Your Adversary
Know Your Adversary
Spread Privacy
Spread Privacy
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
量子位
L
LINUX DO - 热门话题
L
Lohrmann on Cybersecurity
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tor Project blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
V
Visual Studio Blog
T
Threatpost
T
Tenable Blog
有赞技术团队
有赞技术团队
大猫的无限游戏
大猫的无限游戏
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
C
Cisco Blogs
H
Heimdal Security Blog
Attack and Defense Labs
Attack and Defense Labs
A
About on SuperTechFans
Last Week in AI
Last Week in AI
N
News and Events Feed by Topic
T
Threat Research - Cisco Blogs
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
I
Intezer
V
V2EX
Cyberwarzone
Cyberwarzone
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
B
Blog RSS Feed
V
Vulnerabilities – Threatpost
N
Netflix TechBlog - Medium
T
The Blog of Author Tim Ferriss
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
U
Unit 42
PCI Perspectives
PCI Perspectives
P
Privacy International News Feed
D
Docker

博客园 - 小虫1

AI 视频修复技术落地对比:四款去水印工具的技术路线解析 浏览器端本地视频处理实测:4 种去水印方案的技术原理与效果对比 前端开发者视角:一个视频去水印工具的技术猜想 记一次本地视频去水印踩坑经历——从本地部署到在线工具 前端实现视频去水印的几种技术方案对比 豆包视频去水印工具横向测评:麻雀 AI 工具箱与 3 款海外工具实测对比 视频去水印工具实战横评:少谈“黑科技”,多聊实际能用的 2026 在线视频去水印工具实测:4 种方案对比,本地处理首选麻雀AI工具箱 豆包生成的图片,怎么去水印? 2026年,GEO到底怎么做?-麻雀GEO Topaz Video AI的替代品 -麻雀AI视频修复工具,免费、安全、高效的Topaz替代选择 视频清晰度增强网站-麻雀AI视频修复工具 vue2 函数式调用一个弹框组件 跟框架无关的前端换皮肤 前端请求跨域,解决方案 vue项目下自己封装上传文件功能 beego 注册路由失效404,commentsRouter.go没有生成 前端代码实现整体缩放网页,做到缩放分辨率的效果 前端 docker jenkins mkdocs生成的网站为何很慢 重新搞nginx vue公共布局组件Layout引入 重新认识布局:你真的懂flex吗 重新认识布局:html和body元素 重新认识布局:3d空间中的css盒子 重新认识布局:百分比单位 重新认识布局:标准流,浮动,定位的关系 微信小程序 等宽不等高瀑布流
ssh2-sftp-client 上传文件至服务器
小虫1 · 2022-04-26 · via 博客园 - 小虫1

之前搞过一个前端自动化部署的东西:

前端 docker jenkins

这个玩意比较复杂,涉及到从git上拉代码,然后编译上传的过程。我们能不能直接本地打包后,不用xshell这种工具,直接上传到服务器呢?这就需要一个node插件:ssh2-sftp-client 。通过他我们可以使用node的sftp上传文件。

上传文件写在script文件夹下:

代码:

// script/sftp.json
{
    "zhixingyun_production": {
        "sftp": {
            "host": "10.10.10.10",
            "port": 22,
            "username": "xxx",
            "password": "xxx"
        },
        "pathConfig": {
            "remotePath": "/home/xiaochong/web/website/dist",
            "remoteBackupPath": "/home/xiaochong/web/website/dist_backup",
            "localPath": "./dist"
        }
    },
    "zhixingyun_test": {
        "sftp": {
            "host": "10.10.10.10",
            "port": 22,
            "username": "xxx",
            "password": "xxx"
        },
        "pathConfig": {
            "remotePath": "/home/xiaochong/web/test",
            "remoteBackupPath": "/home/xiaochong/web/test_backup",
            "localPath": "./test"
        }
    }
}
// script/upload.js
let Client = require('ssh2-sftp-client');
let client = new Client();
const config = require('./sftp.json')
const args = process.argv.slice(2)
const { sftp, pathConfig } = config[args[0]];

const main = async () => {
	try {
		await client.connect(sftp);
		//删除备份文件,如果有
		if (await client.exists(pathConfig.remoteBackupPath)) {
			await client.rmdir(pathConfig.remoteBackupPath, true)
			console.log('删除备份文件成功')
		}

		// 重命名之前的文件作为备份文件
		if (await client.exists(pathConfig.remotePath)) {
			await client.rename(pathConfig.remotePath, pathConfig.remoteBackupPath)
			console.log('新的备份文件重命名成功');
		}
		// 上传本地文件
		await client.uploadDir(pathConfig.localPath, pathConfig.remotePath);
		console.log('上传成功')
	} catch (err) {
		console.log(err);
	} finally {
		client.end();
	}
}

main();

  最后我们怎么执行upload呢,打包后用node执行即可:

//package.json
"scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build &  node script/upload.js zhixingyun_production",
    "build:test": "vue-cli-service build --mode test &  node script/upload.js zhixingyun_test",
}

  注意点:sftp里的  localPath 写的是./ 因为npm run build执行时,dist文件夹在当前命令行的同级目录。

  这种上传方式是 SFTP,不是stp,用的账号密码是ssh的。