FTP自动上传/vue打包自动上传

ftp自动上传

在我们平时开发项目时,需要将本地代码编译后上传到服务器,我们可以借助Node.js库中的ssh2来实现自动上传

首先我们先来说下ssh2的安装和使用

  1. 安装ssh2
  npm install ssh2
  1. 创建ssh2实例
  const { Client } = require('ssh2');
  1. 连接服务器
  const conn = new Client();conn.on('ready', () => {console.log('SSH Connection Ready');// 可以在这里执行命令、上传文件等}).on('error', (err) => {console.error('Connection Error:', err);}).on('close', () => {console.log('Connection Closed');}).connect({host: 'your-server-ip',port: 22, // SSH 默认端口username: 'your-username',password: 'your-password', // 或使用 privateKey});

4.通过 SFTP 上传文件到远程服务器。
首先,你需要确定你的本地编译后的文件路径和目标服务器的文件路径。然后,你可以使用 SFTP(SSH File Transfer Protocol)协议来上传文件。以下是一个简单的示例:

  conn.sftp((err, sftp) => {if (err) throw err;const localFile = './local-file.txt'; // 本地文件地址,相对地址基于当前脚本const remoteFile = '/path/to/remote-file.txt';sftp.fastPut(localFile, remoteFile, {}, (err) => {if (err) {console.error('上传失败:', err);} else {console.log('文件上传成功');}conn.end();});});

完整代码如下

const ssh2 = require('ssh2')let conn = new ssh2.Client();connect()
// 上传操作
function connect () {conn.on('ready', () => {conn.sftp((err, sftp) => {sftp.fastPut('./dist.tar.gz', '/opt/web/dist.tar.gz', {}, (err, result) => {//上传完成后开始解压Shell(conn)})})}).connect({host: '10.10.10.10',port: '22',username: 'root',password: 'root'})
}// 解压部署操作
function Shell (conn) {conn.shell((err, stream) => {stream.end(`cd /opt/webtar zxvf ./dist.tar.gzrm -rf dist.tar.gzexit`//进入服务器暂存地址//解压上传的压缩包//删除压缩包//退出).on('data', data => {console.log(data.toString())}).on('close', () => {conn.end()})})
}

有时我们想将打包build这一步操作也放入进入,或者使用的是lerna多包一起打包时,先打包完成再一起上传,这里我们需要用到node插件child_process

child_process 是 Node.js 中的一个核心模块,用于创建和管理子进程。它允许你从 Node.js 程序中启动和控制其他进程(例如 shell 脚本、命令行工具或其他 Node.js 脚本),使得 Node.js 可以与外部程序交互,进行并行处理。

假如我们现在有一个文件./build-test.sh是处理vue或者其他项目打包的脚本,我们可以使用child_process来执行这个脚本,如下:

# build各个微应用
lerna run --scope '{test1,test2,test3}' build:test
# 移动各个包至根目录
mv ./test1/test1 ./
mv ./test2/test2 ./
mv ./test3/test3 ./
# 将各个应用打包输出
tar -czvf dist.tar.gz  ./test1 ./test2 ./test3
rm -rf ./test1 ./test2 ./test3

先将多个包打包后再进行gz压缩,最后输入一个压缩包

对应调用./build-test.sh的脚本如下

  //执行tar.sh脚本获取输出流
let pro = cp.exec('"./build-test.sh"', (error) => {if (error) {console.log(error)}
})pro.stdout.pipe(process.stdout)
pro.on('exit', () => {//打包完成后上传// dosome thing
})

到这里了我们就可以直接调用我们之前写好的connect方法,来进行FTP上传

const cp = require('child_process')
//此包ssh2需要下载
const ssh2 = require('ssh2')//执行tar.sh脚本获取输出流
let pro = cp.exec('"./build-test.sh"', (error) => {if (error) {console.log(error)}
})pro.stdout.pipe(process.stdout)
pro.on('exit', () => {//打包完成后上传// 上传connect()
})let conn = new ssh2.Client();// 上传操作
function connect () {conn.on('ready', () => {conn.sftp((err, sftp) => {sftp.fastPut('./dist.tar.gz', '/opt/web/dist.tar.gz', {}, (err, result) => {//上传完成后开始解压Shell(conn)})})}).connect({host: '10.10.10.10',port: '22',username: 'root',password: 'root'})
}// 解压部署操作
function Shell (conn) {conn.shell((err, stream) => {stream.end(`cd /opt/webtar zxvf ./dist.tar.gzrm -rf dist.tar.gzexit`//进入服务器暂存地址//解压上传的压缩包//删除压缩包//退出).on('data', data => {console.log(data.toString())}).on('close', () => {conn.end()})})
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/70060.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL复习

SQL复习 MySQL SQL介绍 SQL SQL的全拼是什么? SQL全拼:Structured Query Language,也叫结构化查询语言。 SQL92和SQL99有什么区别呢? SQL92和SQL99分别代表了92年和99年颁布的SQL标准。 在 SQL92 中采用(&#xff…

nlp|微调大语言模型初探索(1),LLaMA-Factory

前言 微调模型通常比从零开始训练一个模型的技术要求低。公司不需要拥有大量的深度学习专家,利用现有的开源工具和库(如Hugging Face的Transformers等),中小型公司可以轻松地使用和微调大型模型,从而快速实现AI能力的集…

软件定义汽车时代的功能安全和信息安全

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活…

内容中台驱动企业数字化内容管理高效协同架构

内容概要 在数字化转型加速的背景下,企业对内容管理的需求从单一存储向全链路协同演进。内容中台作为核心支撑架构,通过统一的内容资源池与智能化管理工具,重塑了内容生产、存储、分发及迭代的流程。其核心价值在于打破部门壁垒,…

【探商宝】:大数据与AI赋能,助力中小企业精准拓客引

引言:在数据洪流中,如何精准锁定商机? 在竞争激烈的商业环境中,中小企业如何从海量信息中快速筛选出高价值客户?如何避免无效沟通,精准触达目标企业? 探商宝——一款基于大数据与AI技术的企业信…

springboot接入ShardingJDBC

ShardingJDBC 是 Apache ShardingSphere 的一个子项目,它是一个开源的分库分表中间件,提供了透明化的数据分片、分布式事务和数据库治理等功能。ShardingJDBC 以 JDBC Driver 的形式提供,支持任何基于 JDBC 的 ORM 框架、持久层框架和数据库连…

Dify平台搭建面试机器人

无代码搭建面试机器人 什么是Dify 什么是Dify Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能…

Django创建一个非前后端分离平台

1.pub_blog前端创立 1.blog/pub路由 注意两个路由的区别 2.完善页面 用表单实现 3.加载wangeditor的几个文件 4.配置样式 5.配置js代码,单独放在js文件夹中,js文件夹pub_blog onload事件,加载完成后会再加载 5.提交按钮

什么情况下索引会失效

一、索引创建的原则 1、针对数据量较大,且查询比较频繁的表建立索引。 单表超过10万数据,即可增加索引 2、使用经常作为查询条件(where)、排序(order by)、分组(group by)操作的字…

内容中台重构企业内容管理流程驱动智能协作升级

内容概要 内容中台作为企业数字化转型的核心基础设施,通过技术架构革新与功能模块整合,重构了传统内容管理流程的底层逻辑。其核心价值在于构建动态化、智能化的内容生产与流转体系,将分散的创作、存储、审核及分发环节纳入统一平台管理。基…

用deepseek学大模型04-模型可视化与数据可视化

deepseek.com: pytorch可视化工具 生成神经网络图 在 PyTorch 中,可视化神经网络结构的常用工具和方法有以下几种,以下将详细介绍它们的用法: 1. TensorBoard (PyTorch 官方集成) PyTorch 通过 torch.utils.tensorboard 支持 TensorBoard&a…

JavaScript设计模式 -- 外观模式

在实际开发中,往往会遇到多个子系统协同工作时,直接操作各个子系统不仅接口繁琐,还容易导致客户端与内部实现紧密耦合。**外观模式(Facade Pattern)**通过为多个子系统提供一个统一的高层接口,将复杂性隐藏…

【性能测试】如何理解“10个线程且10次循环“的请求和“100线程且1次循环“的请求

在性能测试中,我们常常会见到不同的并发配置:比如“10个线程且10次循环”与“100线程且1次循环”。乍一看,这两个设置的总请求数都是100次,但它们对系统的压力和测试场景却截然不同。了解其中的区别,能帮助你更精准地模…

Spring Boot 实战:轻松实现文件上传与下载功能

目录 一、引言 二、Spring Boot 文件上传基础 (一)依赖引入 (二)配置文件设置 (三)文件上传接口编写 (一)文件类型限制 (二)文件大小验证 &#xff0…

【Golang】GC探秘/写屏障是什么?

之前写了 一篇【Golang】内存管理 ,有了很多的阅读量,那么我就接着分享一下Golang的GC相关的学习。 由于Golang的GC机制一直在持续迭代,本文叙述的主要是Go1.9版本及以后的GC机制,该版本中Golang引入了 混合写屏障大幅度地优化了S…

DeepSeek教unity------MessagePack-03

数据契约兼容性 你可以使用 [DataContract] 注解代替 [MessagePackObject]。如果类型用 DataContract 进行注解,可以使用 [DataMember] 注解代替 [Key],并使用 [IgnoreDataMember] 代替 [IgnoreMember]。 然后,[DataMember(Order int)] 的…

【对比】Pandas 和 Polars 的区别

Pandas vs Polars 对比表 特性PandasPolars开发语言Python(Cython 实现核心部分)Rust(高性能系统编程语言)性能较慢,尤其在大数据集上(内存占用高,计算效率低)极快,利用…

百度千帆平台对接DeepSeek官方文档

目录 第一步:注册账号,开通千帆服务 第二步:创建应用,获取调用秘钥 第三步:调用模型,开启AI对话 方式一:通过API直接调用 方式二:使用SDK快速调用 方式三:在千帆大模…

49. c++计时器

为了测试某段特定代码的执行时间&#xff0c;体现代码的性能&#xff0c;可以使用计时器对代码段计时。下面使用std::chrono中的api编写简单案例&#xff1a; // // main.cpp // HelloWorld // // Created by on 2024/11/28. //#include <iostream> #include <vec…

Natural Language Processing NLP

NLP 清晰版本查看 Sentence segmentation (split)Tokenisation (split)Named entity recognition (combine) 概念主要內容典型方法Distributional Semantics&#xff08;分佈式語義&#xff09;&#xff08;分銷語義&#xff08;分佈式語義&#xff09;單詞的語義來自於它的…