FTP自动上传/vue打包自动上传
- 手机
- 2025-09-03 15:33:03

ftp自动上传
在我们平时开发项目时,需要将本地代码编译后上传到服务器,我们可以借助Node.js库中的ssh2来实现自动上传
首先我们先来说下ssh2的安装和使用 安装ssh2 npm install ssh2 创建ssh2实例 const { Client } = require('ssh2'); 连接服务器 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/web tar zxvf ./dist.tar.gz rm -rf dist.tar.gz exit ` //进入服务器暂存地址 //解压上传的压缩包 //删除压缩包 //退出 ).on('data', data => { console.log(data.toString()) }).on('close', () => { conn.end() }) }) } 有时我们想将打包build这一步操作也放入进入,或者使用的是lerna多包一起打包时,先打包完成再一起上传,这里我们需要用到node插件child_processchild_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/web tar zxvf ./dist.tar.gz rm -rf dist.tar.gz exit ` //进入服务器暂存地址 //解压上传的压缩包 //删除压缩包 //退出 ).on('data', data => { console.log(data.toString()) }).on('close', () => { conn.end() }) }) }FTP自动上传/vue打包自动上传由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“FTP自动上传/vue打包自动上传”