首先下载npm模块

npm install --save-dev gulp gulp-sftp webpack del
  1. gulp-sftp 上传服务器主要依赖
  2. gulp、webpack必备
  3. del 是一个清空文件目录的依赖包

gulpfile.js

const gulp = require('gulp');

const webpack = require('webpack')
const path = require('path');
const del = require('del');
const ftp = require('gulp-sftp');
// 是webpack配置文件
const webpackConfig = require('./webpack.config');
// 是上传地址配置,可以在.gitignore中忽略此文件上传,为了安全本地拥有就可以了
const config = require('./config'); // 判断是开发环境还是生产环境
const isEnv = process.env.NODE_ENV == 'production';
/**
* 清除生产目录文件
*/
gulp.task('clean', ['upload'], function (callback) {
console.log('## 已经成功部署到服务器上')
console.log('## 清除原来编译的代码')
del(['.' + config.publicPath], callback)
}); /**
* 编译代码
*/
gulp.task('build', function (callback) {
console.log('## 代码编译开始')
webpack(webpackConfig, function (err, state) {
console.log('## 代码编译完成')
callback(err)
})
}); /**
* 编译代码,自动部署到服务器
*/
gulp.task('upload', function (callback) {
console.log('## 正在部署到服务器上')
var dev = isEnv ? config.devDist : config.devTest
gulp.src('.' + config.publicPath + '**')
.pipe(ftp(Object.assign(dev, {callback})))
}); /**
* 上传到测试服务器上
*/
gulp.task('devTest', ['build', 'upload', 'clean']) /**
* 上传到生产服务器上
*/
gulp.task('devDist', ['build', 'upload', 'clean'])

config.js

module.exports = {
devTest: { //部署到测试服务器上
remotePath: '/root/app/', //部署到服务器的路径
host: 'xx.xxx.xxx.xx', //ip地址
user: 'root', //帐号
pass: "******", //密码
port: 22 //端口
},
devDist: { //部署正式服务器上
remotePath: '/root/app/', //部署到服务器的路径
host: 'xx.xx.xxx.xxx', //ip地址
user: 'root', //帐号
pass: '******', //密码
port: 22 //端口
},
publicPath: '/dist/' //程序编译好路径
}

有一点要注意的是你会遇到这样的错误:

[15:22:46] Starting 'upload'...
[15:22:46] Authenticating with password.
events.js:141
throw er; // Unhandled 'error' event
^
Error: No such file
at SFTP._parse (E:\web\cdn\ns\node_modules\ssh2\lib\SFTP\SFTPv3.js:1090:23)
at ChannelStream.<anonymous> (E:\web\cdn\ns\node_modules\ssh2\lib\SFTP\SFTPv3.js:72:10)
at emitOne (events.js:77:13)
at ChannelStream.emit (events.js:169:7)
at readableAddChunk (_stream_readable.js:146:16)
at ChannelStream.Readable.push (_stream_readable.js:110:10)
at Parser.<anonymous> (E:\web\cdn\ns\node_modules\ssh2\lib\Channel.js:102:25)
at emitOne (events.js:77:13)
at Parser.emit (events.js:169:7)
at Parser.parsePacket (E:\web\cdn\ns\node_modules\ssh2\lib\Parser.js:607:12)

config.js 你可以修改为这样:

module.exports = {
devTest: { //部署到测试服务器上
remotePath: '/root/app/', // 仅仅是结尾多了一个”/“,部署到服务器的路径
host: 'xx.xxx.xxx.xx', //ip地址
user: 'root', //帐号
pass: "******", //密码
port: 22 //端口
},
devDist: { //部署正式服务器上
remotePath: '/root/app/', // 仅仅是结尾多了一个”/“,部署到服务器的路径
host: 'xx.xx.xxx.xxx', //ip地址
user: 'root', //帐号
pass: '******', //密码
port: 22 //端口
},
publicPath: '/dist/' //程序编译好路径
}

仅仅是结尾多了一个“/”,这样就可以成功了,是不是很神奇!

如果本文对你有帮助,点个赞

关于gulp-sftp上传到服务器的更多相关文章

  1. 利用nodejs监控文件变化并使用sftp上传到服务器

    很久没写博客了,因为最近在用react+express做一个自己的工具型网站(其实就是夺宝岛抢拍器) 然后因为经常要改动,而且又要放到服务器上进行测试.总是要webpack,然后手动把文件上传上去,不 ...

  2. C#远程执行Linux系统中Shell命令和SFTP上传文件

    一.工具:SSH.Net 网址:https://github.com/sshnet/SSH.NET 二.调用命令代码: Renci.SshNet.SshClient ssh = "); ss ...

  3. 使用SFTP上传文件到服务器的简单使用

    最近用到SFTP上传文件查找了一些资料后自己做了一点总结,方便以后的查询 /** * 将文件上传到服务器 * * @param filePath * 文件路径 * @param channelSftp ...

  4. sftp上传到远程服务器

    开发遇到一个需求,需要将图片通过sftp上传到远程服务器上,之前没用过这个功能,折腾了我好几天才搞定,下面记录下我的处理方法: $sftp = 'ssh2.sftp://';//连接sftp $con ...

  5. VS Code 关于SFTP上传文件到多服务器的配置

    工欲善其事,必先利其器! 刚学前端的时候一直用的DW来编写代码,其功能非常强大,但在Linux下不能用,所以就转VS Code了. 但是刚开始使用VS Code的时候,很多DW上的功能需要自己安装扩展 ...

  6. sftp上传 - 待完

    1.搭建本地sftp 1.1.下载msftpsrvr.exe软件 下载地址:http://www.download3k.com/Install-Core-FTP-Mini-SFTP-Server.ht ...

  7. 用jsch.jar实现SFTP上传下载删除

    java类: 需要引用的jar: jsch-0.1.53.jar 关于jsch有篇文章关于目录的问题写得非常好:http://www.zzzyk.com/show/9f02969327434a6c.h ...

  8. THINKPHP 3.2 PHP SFTP上传下载 代码实现方法

     一.SFTP介绍:使用SSH协议进行FTP传输的协议叫SFTP(安全文件传输)Sftp和Ftp都是文件传输协议.区别:sftp是ssh内含的协议(ssh是加密的telnet协议),  只要sshd服 ...

  9. Java Sftp上传下载文件

    需要使用jar包  jsch-0.1.50.jar sftp上传下载实现类 package com.bstek.transit.sftp; import java.io.File; import ja ...

  10. Xshell5下利用sftp上传下载传输文件

    sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP 为 SSH ...

随机推荐

  1. Debian 无线网络切换问题解决方案

    sudo gedit /etc/NetworkManager/NetworkManager.conf 2: 添加 [device] wifi.scan-rand-mac-address=no 3:重启 ...

  2. django_1

    新闻 管理   Django-1   一 什么是web框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你 ...

  3. 基于注解的SpringMVC添加其他的Servlet、Filter以及Listener

    我们可以在AbstractAnnotationConfigDispatcherServletInitializer的实现类中重写onStartup(ServletContext servletCont ...

  4. 20175204 张湲祯 2018-2019-2《Java程序设计》

    Arrays和String单元测试 一.类的作用 1.- String类 charAt String的charAt的作用是将字符串中第i个位置上的字符(从0开始计数)赋值给n,其用法为n=string ...

  5. 2018-2019 网络对抗技术 20165231 Exp4 恶意代码分析

    实验目标 1.是监控你自己系统的运行状态,看有没有可疑的程序在运行. 2.是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,systrac ...

  6. 【转】Beginning Game Programming v2.0

    Beginning Game Programming v2.0 Last Updated 8/19/18 Greetings everyone, welcome to the ground up re ...

  7. certificate & encryption

    openssl commonly used commands before use Configure to generate Makefile, should notice follow optio ...

  8. WPF 10天修炼 第七天- WPF资源、样式、控件模板

    WPF资源 对象资源 WPF允许在XAML标记的任意位置定义资源.比如在特定的控件.窗口或应用程序级别定义资源,WPF资源系统提供的对象资源有如下好处: 1.  高效:使用对象资源可以在一个地方定义而 ...

  9. nginx rewrite规则笔记

    优先级 在nginx的location和配置中location的顺序没有太大关系.正location表达式的类型有关.相同类型的表达式,字符串长的会优先匹配. 第一优先级:等号类型(=)的优先级最高. ...

  10. js之词法作用域与动态作用域

    事实上JavaScript并不具有动态作用域,它只有词法作用域,简单明了,但是this机制某种程度上很像动态作用域 词法作用域:是一套引擎如何寻找变量以及会在何处找到变量的规则,它是定义在词法阶段的作 ...