起因

刚加入一个小组的项目开发,开发环境是基于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的脚本分享相关推荐

  1. node.js搭建文件服务器,Node.js创建HTTP文件服务器的使用示例

    Node.js创建HTTP文件服务器的使用示例 发布时间:2020-08-26 01:41:13 来源:脚本之家 阅读:103 作者:foruok HelloWorld示例只有演示意义,这次我们来搞一 ...

  2. suse ftp文件服务器搭建,SUSE下FTP服务器搭建

    FTP(File Transfer Protocol),是TCP/IP网络上两台计算机传送文件的协议,是在TCP/IP网络和Internet上最早使用的协议之一,属于网络协议组的应 用层.FTP客户机 ...

  3. nodejs学习巩固笔记-nodejs基础,Node.js 高级编程(核心模块、模块加载机制)

    目录 Nodejs 基础 大前端开发过程中的必备技能 nodejs 的架构 为什么是 Nodejs Nodejs 异步 IO Nodejs 事件驱动架构 全局对象 全局变量之 process 核心模块 ...

  4. java nodejs aes_Java与Node.js利用AES加密解密出相同结果的方法示例

    前言 工作中遇到nodejs端通过aes加密,安卓客户端Java解密,同样nodejs也需要解密安卓客户端加密过来的内容,发现两个加密结果不一样,查询资料发现java端需要对密钥再MD5加密一遍,以下 ...

  5. node.js require 自动执行脚本 并生成html,从HTML页面执行Nodejs脚本?

    小编典典 我使用普通的JS而非咖啡脚本,因此这是每个Fosco注释(称为server.js)的示例: var express = require('express'), list = require( ...

  6. nodeJS 中文API node.js 中文文档

    Node.js Manual & Documentation Table Of Contents Synopsis 概要 Global Objects 全局对象 global process ...

  7. Node.js 服务器端的JavaScript脚本新秀:Node.js

    目前,Node.js是在前端页面开发中十分受欢迎的,它是一套用来编写高性能网络服务器的JavaScript工具包,在本文中,将带领各位初学者介绍Node JS的基本知识,要求本文的阅读对象为有一定Ja ...

  8. node.js require 自动执行脚本 并生成html,利用node.js实现自动生成前端项目组件的方法详解...

    本文主要给大家介绍了关于利用node.js实现自动生成前端项目组件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 脚本编写背景 写这个小脚本的初衷是,项目本身添加一个组件太 ...

  9. node.js require 自动执行脚本 并生成html,nodejs 执行脚本并实时输出

    接到需求 需要一个服务来执行shell脚本,要求可以实时打印shell脚本执行的过程,并看到脚本执行的结果. 明确任务目标: 这是一个web服务,需要执行shell脚本 当一个脚本执行的时候,再次发送 ...

最新文章

  1. python写web难受-python写web
  2. 什么时候用抽象?什么时候用接口?
  3. 学习使用新浪接口随笔(一)
  4. mysql 镜像备份_手动构建percona-xtrabackup Docker镜像,并实现mysql数据备份
  5. 转载:OpenStack从入门到放弃
  6. Atitit 可移植性之道attilax著
  7. java 贪吃蛇 源码+图片
  8. APUE 第四章总结
  9. apollo学习之:如何测试canbus模块
  10. “你打算怎么构建云安全资源池”
  11. 四部金融投资经典教材和30部必读的投资学经
  12. 两码一号(四):蚂蚁产品大盘
  13. 指数基金投资指南读书笔记
  14. 医学影像工作站 v2.2 官方
  15. cvCaptureFromFile一直返回NULL
  16. sicily 1002
  17. Git版本控制管理——远程版本库
  18. 森林图怎么分析_图说meta十一:森林图暨RevMan软件使用方法简介
  19. 为什么二级菜单会被挡住_多级下来菜单被select挡住的有关问题
  20. 我的世界服务器掉落率修改,[管理|综合]Scavenger —— 拾荒者,死亡不掉落[1.2.3-1.7.4]...

热门文章

  1. Java 生成随机数的 N 种方法
  2. 【平台兼容性】jeecg部署weblogic 测试,修改配置方法
  3. 百度编辑器 Ueditor 如何增加模板 ?
  4. 打破传统天价SAP培训,开创SAP师徒之路,经验丰富的老顾问带徒弟 qq群150104068
  5. 内部类及内部类什么时候使用
  6. 阿里云物联网平台体验(树莓派+Python篇)
  7. leetcode75
  8. Nerv --- React IE8 兼容方案
  9. 以监控为核心 实现安防智能化全面兼容
  10. IBM发布JumpGate 连接OpenStack和公有云