nodejs ftp文件服务器,node.js自动上传ftp的脚本分享
起因
刚加入一个小组的项目开发,开发环境是基于node环境,通过webpack打包构建代码,然后上传sftp,在浏览器测试。这种开发模式无可厚非,但是每次修改源代码,然后build,然后upload,不胜其烦。之前项目中有过 gulp-sftp任务脚本,然而并不是生效。于是自力更生,另谋他法,搞一个自动上传sftp的服务脚本。
设想
因为基于webpack,所以直接启动webpack编译的watch监听即可,在watch回调里执行stfp的上传,上传去npm社区找一个sftp的客户端插件
实现
使用了插件ssh2-sftp-client,文档有使用说明和api
写书写了一个 sftp 模块,连接完,直接导出
const Client = require('ssh2-sftp-client');
const fs = require('fs');
const sftp = new Client();
sftp
.connect({
host: '0.0.0.0', // ftp服务器ip地址
port: '22', // ftp服务器port
username: 'yourname', // 你的登录用户名
password: 'yourpass', // 你的密码
privateKey: fs.readFileSync('/Users/yourname/.ssh/id_rsa'), // 私钥
passphrase: 'yourpass', // 私钥密码
})
.then(() => {
console.log('ftp文件服务器连接成功');
})
.catch(err => {
console.log(err, 'catch error');
});
module.exports = sftp;
然后在webpack的watch里进行 上传文件即可,关于上传文件,图片的等类型需要使用Buffer类型上传,做一个特殊处理
const path = require('path');
const fs = require('fs');
const yargs = require('yargs');
const webpack = require('webpack');
const webpackConfig = require('./webpack.prod.config');
const sftp = require('./sftp');
const user = yargs.argv.user || '';
console.log(user);
const staticFilesPath = {
js: {
local: path.resolve(__dirname, '../dist/js'),
remote: `/upload_code/${user}/static/mobile/js/dist`,
},
css: {
local: path.resolve(__dirname, '../dist/css'),
remote: `/upload_code/${user}/static/mobile/css/`,
},
img: {
local: path.resolve(__dirname, '../dist/images'),
remote: `/upload_code/${user}/static/mobile/images/`,
},
};
let isFirstBuild = true;
const compiler = webpack(webpackConfig);
const watching = compiler.watch(
{
ignored: /node_modules/,
aggregateTimeout: 100,
poll: 1000,
},
(err, stats) => {
if (err || stats.hasErrors()) {
console.log(err);
}
console.log('编译成功!');
if (isFirstBuild) {
isFirstBuild = false;
return;
}
console.log('正在上传...');
uploadFile()
.then(() => {
console.log('------所有文件上传完成!-------\n');
})
.catch(() => {
console.log('------上传失败,请检查!-------\n');
});
}
);
/**
* 处理文件路径,循环所有文件,如果是图片需要读取成Buffer类型
**/
function handleFilePath(obj, type) {
const { local, remote } = obj;
const files = fs.readdirSync(local);
return files.map(file => {
const _lp = `${local}/${file}`;
return {
type: type,
file: file,
localPath: type !== 'img' ? _lp : fs.readFileSync(_lp),
remotePath: `${remote}/${file}`,
};
});
}
/**
* 上传文件
**/
function uploadFile() {
let files = [];
Object.keys(staticFilesPath).forEach(key => {
files = files.concat(handleFilePath(staticFilesPath[key], key));
});
const tasks = files.map(item => {
return new Promise((resolve, reject) => {
sftp
.put(item.localPath, item.remotePath)
.then(() => {
console.log(`${item.file}上传完成`);
resolve();
})
.catch(err => {
console.log(`${item.file}上传失败`);
reject();
});
});
});
return Promise.all(tasks);
}
注意点:
连接sftp服务器,推荐使用 私钥文件连接,使用password出错可能性比较大
上传文件部分,目前不支持上传一个目录,所以需要循环处理文件
上传文件部分,容易出错,一定要保证远端服务器存在对应目录,目前插件没有自动创建目录的机制
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
nodejs ftp文件服务器,node.js自动上传ftp的脚本分享相关推荐
- node.js搭建文件服务器,Node.js创建HTTP文件服务器的使用示例
Node.js创建HTTP文件服务器的使用示例 发布时间:2020-08-26 01:41:13 来源:脚本之家 阅读:103 作者:foruok HelloWorld示例只有演示意义,这次我们来搞一 ...
- suse ftp文件服务器搭建,SUSE下FTP服务器搭建
FTP(File Transfer Protocol),是TCP/IP网络上两台计算机传送文件的协议,是在TCP/IP网络和Internet上最早使用的协议之一,属于网络协议组的应 用层.FTP客户机 ...
- nodejs学习巩固笔记-nodejs基础,Node.js 高级编程(核心模块、模块加载机制)
目录 Nodejs 基础 大前端开发过程中的必备技能 nodejs 的架构 为什么是 Nodejs Nodejs 异步 IO Nodejs 事件驱动架构 全局对象 全局变量之 process 核心模块 ...
- java nodejs aes_Java与Node.js利用AES加密解密出相同结果的方法示例
前言 工作中遇到nodejs端通过aes加密,安卓客户端Java解密,同样nodejs也需要解密安卓客户端加密过来的内容,发现两个加密结果不一样,查询资料发现java端需要对密钥再MD5加密一遍,以下 ...
- node.js require 自动执行脚本 并生成html,从HTML页面执行Nodejs脚本?
小编典典 我使用普通的JS而非咖啡脚本,因此这是每个Fosco注释(称为server.js)的示例: var express = require('express'), list = require( ...
- nodeJS 中文API node.js 中文文档
Node.js Manual & Documentation Table Of Contents Synopsis 概要 Global Objects 全局对象 global process ...
- Node.js 服务器端的JavaScript脚本新秀:Node.js
目前,Node.js是在前端页面开发中十分受欢迎的,它是一套用来编写高性能网络服务器的JavaScript工具包,在本文中,将带领各位初学者介绍Node JS的基本知识,要求本文的阅读对象为有一定Ja ...
- node.js require 自动执行脚本 并生成html,利用node.js实现自动生成前端项目组件的方法详解...
本文主要给大家介绍了关于利用node.js实现自动生成前端项目组件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 脚本编写背景 写这个小脚本的初衷是,项目本身添加一个组件太 ...
- node.js require 自动执行脚本 并生成html,nodejs 执行脚本并实时输出
接到需求 需要一个服务来执行shell脚本,要求可以实时打印shell脚本执行的过程,并看到脚本执行的结果. 明确任务目标: 这是一个web服务,需要执行shell脚本 当一个脚本执行的时候,再次发送 ...
最新文章
- python写web难受-python写web
- 什么时候用抽象?什么时候用接口?
- 学习使用新浪接口随笔(一)
- mysql 镜像备份_手动构建percona-xtrabackup Docker镜像,并实现mysql数据备份
- 转载:OpenStack从入门到放弃
- Atitit 可移植性之道attilax著
- java 贪吃蛇 源码+图片
- APUE 第四章总结
- apollo学习之:如何测试canbus模块
- “你打算怎么构建云安全资源池”
- 四部金融投资经典教材和30部必读的投资学经
- 两码一号(四):蚂蚁产品大盘
- 指数基金投资指南读书笔记
- 医学影像工作站 v2.2 官方
- cvCaptureFromFile一直返回NULL
- sicily 1002
- Git版本控制管理——远程版本库
- 森林图怎么分析_图说meta十一:森林图暨RevMan软件使用方法简介
- 为什么二级菜单会被挡住_多级下来菜单被select挡住的有关问题
- 我的世界服务器掉落率修改,[管理|综合]Scavenger —— 拾荒者,死亡不掉落[1.2.3-1.7.4]...