如何使用Gulp通过SSH复制文件夹?

8

最近我一直在尝试使用gulp,取得了很多成功,但现在我卡住了。

我已经让gulp构建了所有的东西,现在想上传一个文件夹。我用gulp-scp2创建了一个deploy任务:

gulp.task('deploy', ['clean', 'build'], function() {
    var privateKeyPath = getUserHome() + '/.ssh/id_rsa';

    gulp.src('public/dist')
        .pipe(scp({
            host: 'myhost',
            username: 'user',
            dest: '/home/user/test',
            agent: process.env['SSH_AUTH_SOCK'],
            agentForward: true,
            watch: function(client) {
                client.on('write', function(o) {
                    console.log('write %s', o.destination);
                });
            }
        })).on('error', function(err) {
            console.log(err);
        });
});

很不幸,当我这样做时,出现了以下错误:
Error: Content should be buffer or file descriptor

我该如何使用gulp通过SSH复制文件夹?

1
似乎 gulp-scp2 不是一个有效的 gulp 插件,因为它没有列在 gulp 官网 上。你试过 gulp-sftp 吗?它看起来是一个更好的设计方案,并且应该可以实现相同的目标。 - OverZealous
为什么不使用代码仓库并将所需文件推送到其中呢?我认为这是在生产环境上部署文件的最佳方式。 - avcajaraville
2个回答

10

我最终通过利用node的scp2库找到了解决方案:


scpClient = require('scp2');

gulp.task('scp', [], function (cb) {
    scpClient.scp('local_folder', {
        "host": "remote_host",
        "port": "remote_port",
        "username": "username_on_remote",
        "path": "/path/on/remote",
        "agent": process.env["SSH_AUTH_SOCK"],
        "agentForward": true
    }, cb)
});

0

和之前的回答一样,我最终使用了一个直接的节点版本,这个版本可以在gulp 4+中工作:

首先安装库(确保在项目中本地安装,全局版本无法在gulp文件中使用):

 npm install scp2

然后在 gulp 文件中:

 var scpClient = require('scp2');


 function deploySCP2(){
    return scpClient.scp(paths.buildAll, {
       "host": "host",
       "username": "username",
       "password": "password",
       "path": "path"
    }, function(err) {  })
 }

这将立即生效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接