【问题标题】:Vinyl FTP for Gulp configuration用于 Gulp 配置的乙烯基 FTP
【发布时间】:2017-06-01 13:00:32
【问题描述】:

我正在使用 Gulp 在文件保存时从 LESS-CSS 生成 CSS。我希望将 css 文件立即上传到服务器,所以我正在尝试使用 Vinyl-FTP。我是 NPM/NodeJS/Gulp/JavaScript 的新手,所以我需要一些帮助。

在我的 gulpfile.js 中,我包含了这段代码(当然隐藏了主机、用户和密码):

// Vinyl FTP 
gulp.task( 'deploy', function () {

    var conn = ftp.create( {
        host:     'ftp-server',
        user:     'user',
        password: 'password',
        parallel: 10,
        log:      gutil.log
    } );

    var globs = [
        '../site/templates/templatename/css/bootstrap.min.css'
    ];


    return gulp.src( globs, { base: '.', buffer: false } )
        .pipe( conn.newer( '/public_html/dev2/templates/templatename/css' ) ) 
        .pipe( conn.dest( '/public_html/dev2/templates/templatename/css' ) );

} );

我希望每次点击“保存”时都上传 bootstrap.min.css 文件。该文件相对于我的 gulp 目录位于../site/templates/templatename/css/bootstrap.min.css。我希望它上传到我的开发站点,该站点位于服务器上的/public_html/dev2/templates/templatename/css(是的,这是 Joomla)。

显然,我使用了错误的路径,因为这就是它产生的结果:

    [14:44:21] Using gulpfile /mnt/e/Sites/successfulspeakernow.com/gulp/gulpfile.js
[14:44:21] Starting 'less'...
[14:44:21] Finished 'less' after 20 ms
[14:44:21] Starting 'watch'...
[14:44:21] Finished 'watch' after 267 ms
[14:44:21] Starting 'deploy'...
[14:44:21] CONN 
[14:44:23] READY
[14:44:23] MLSD  /public_html/dev2/templates/templatename/site/templates/templatename/css
[14:44:23] MLSD  /public_html/dev2/templates/templatename/site/templates/templatename
[14:44:23] MLSD  /public_html/dev2/templates/templatename/site/templates
[14:44:23] MLSD  /public_html/dev2/templates/templatename/site
[14:44:23] MLSD  /public_html/dev2/templates/templatename
[14:44:23] MLSD  /public_html/dev2/templates
[14:44:23] MKDIR /public_html/dev2/templates/templatename/site
[14:44:23] MKDIR /public_html/dev2/templates/templatename/site/templates
[14:44:23] MKDIR /public_html/dev2/templates/templatename/site/templates/templatename
[14:44:23] MKDIR /public_html/dev2/templates/templatename/site/templates/templatename/css
[14:44:23] PUT   /public_html/dev2/templates/templatename/site/templates/templatename/css/bootstrap.min.css
[14:44:23] UP     37% /public_html/dev2/templates/templatename/site/templates/templatename/css/bootstrap.min.css
[14:44:23] UP     74% /public_html/dev2/templates/templatename/site/templates/templatename/css/bootstrap.min.css
[14:44:23] UP    100% /public_html/dev2/templates/templatename/site/templates/templatename/css/bootstrap.min.css
[14:44:23] Finished 'deploy' after 1.86 s
[14:44:23] Starting 'default'...
[14:44:23] Finished 'default' after 8.9 μs
[14:44:23] DISC 

当我带着我的 FTP 程序去那里时,我发现:

/public_html/dev2/templates/templatename/site/templates/templatename/css/bootstrap.min.css

你能解释一下要调整什么,以便将 bootstrap.min.css 文件上传到服务器上的正确目录吗?

谢谢,

汤姆

【问题讨论】:

    标签: node.js joomla gulp development-environment vinyl-ftp


    【解决方案1】:

    我遇到了同样的问题。 Vinyftp 在目标文件夹中创建源文件夹结构。为避免该问题,只需将目标更改为您的网络服务器的根目录。 我的代码有点不同,但它显示了问题出在哪里。

    var gulp = require('gulp');
    var gutil = require( 'gulp-util' );
    var ftp = require( 'vinyl-ftp' );
    
    /** Configuration **/
    var user = 'username';
    var password = 'password';
    var host = 'hostname';  
    var port = 21;  
    var localFilesGlob = ['public_html/templates/protostar/css/template.css'];  
    var remoteFolder = ''; // <- HERE MUST BE AN EMPTY STRING TO POINT THE VINYLFTP TO ROOT
    
    
    function getFtpConnection() {  
        return ftp.create({
            host: host,
            port: port,
            user: user,
            password: password,
            parallel: 5,
            log: gutil.log
        });
    }
    
    gulp.task('ftp-deploy', function() {
    
        var conn = getFtpConnection();
    
        return gulp.src(localFilesGlob, { base: '.', buffer: false })
            .pipe( conn.newer( remoteFolder ) ) // only upload newer files 
            .pipe( conn.dest( remoteFolder ) )
        ;
    });
    

    【讨论】:

    • 非常感谢@dluzhnevsky 我最终做的是将 bootstrap.min.css 文件放在 gulp 目录中,然后像这样更改代码:var globs = ['../css/bootstrap.min.css']; ...return gulp.src( globs, { base: '.', buffer: false } ) .pipe( conn.newer( '/public_html/dev2/templates/templatename/css/' ) ) // only upload newer files .pipe( conn.dest( '/public_html/dev2/templates/templatename/css/' ) );
    • 恐怕 Stackoverflow 不允许我在 5 分钟后编辑评论......所以又来了:非常感谢 @dluzhnevsky 我最终做的事情是引导程序。 gulp 目录中的 min.css 文件,然后像这样更改代码:var globs = ['../css/bootstrap.min.css']; ... return gulp.src( globs, { base: '.', buffer: false } ) .pipe( conn.newer( '/public_html/dev2/templates/templatename/css/' ) ) .pipe( conn.dest( '/public_html/dev2/templates/templatename/css/' ) ); 恐怕 stackoverflow 上 cmets 的格式不是很好......干杯,Thom
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    相关资源
    最近更新 更多