【问题标题】:Why do I have to save the LESS source file twice before Gulp/Vinyl-ftp uploads the bootstrap.min.css?为什么在 Gulp/Vinyl-ftp 上传 bootstrap.min.css 之前我必须保存 LESS 源文件两次?
【发布时间】:2017-07-18 16:09:04
【问题描述】:

我有一个 gulpfile.js,内容如下。我希望它生成 bootstrap.min.css 并在我将 LESS 文件保存在 /less 文件夹中后立即将其上传到服务器。问题是:文件保存两次后,才会上传最终结果。我想我做错了什么。

这是我正在使用的代码:

    var gulp = require ('gulp'),
    //cleanCSS = require('gulp-clean-css'),
    autoprefixer = require('gulp-autoprefixer'),
    less = require('gulp-less'),
    plumber = require('gulp-plumber'),
    sourcemaps = require('gulp-sourcemaps'),
    rename = require('gulp-rename'),
    gutil = require('gulp-util'),
    ftp = require ('vinyl-ftp');


// Styles Task using LESS
// Uglifies
gulp.task('less', function(){
    gulp.src('../less/bootstrap.less')
    .pipe(plumber())
    .pipe(less())
    .pipe(autoprefixer({}))
    .pipe(sourcemaps.init())
    .pipe(rename({suffix: '.min'}))
    .pipe(sourcemaps.write('.'))
    .pipe(gulp.dest('../css/'));
});

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

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

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



        return gulp.src( globs, { base: '.', buffer: false } )
            .pipe( conn.newer( '/public_html/[folder/on/server]/css/' ) ) // only upload newer files
            .pipe( conn.dest( '/public_html/[folder/on/server]/css/' ) );

    } );
// Watch Task
// Watches JS
gulp.task('watch', function(){
    gulp.watch('../less/**/*.less', ['less','deploy']);
});

gulp.task ('default', ['less','deploy','watch']);

由于我不是 javascript/npm/gulp/node.js 专家,我很茫然。我需要两次保存less-file,这让我很烦恼。 任何人都可以识别错误吗?如果您需要更多信息,请随时询问。

谢谢,

汤姆

【问题讨论】:

    标签: javascript twitter-bootstrap gulp vinyl-ftp


    【解决方案1】:

    您有两个可能的问题:

    1. 在您的“更少”任务中添加一个 return,以便 gulp 知道它已经完成。
    2. 您不能在“监视”任务中假设 ['less', 'deploy'] 以任何特定顺序运行/完成。它们并行运行,因此顺序可能会有所不同。与“默认”任务相同。

    最好让你的“部署”任务依赖于“少”任务 ala

    gulp.task( 'deploy', ['less'], function () {
    

    改成

     gulp.watch('../less/**/*.less', ['deploy']);
    
    
    // Styles Task using LESS
    // Uglifies
    gulp.task('less', function(){
    // add the return to the next line
      return gulp.src('../less/bootstrap.less')
      .pipe(plumber())
      .pipe(less())
      .pipe(autoprefixer({}))
      .pipe(sourcemaps.init())
      .pipe(rename({suffix: '.min'}))
      .pipe(sourcemaps.write('.'))
      .pipe(gulp.dest('../css/'));
    });
    
    // Watch Task
    // Watches JS
    gulp.task('watch', function(){
      gulp.watch('../less/**/*.less', ['deploy']);
    });
    
    // Vinyl FTP 
    gulp.task( 'deploy', ['less'], function () {
    
        var conn = ftp.create( {
            host:     '[ftp-address]',
            user:     '[ftp-user]',
            password: '[password]',
            parallel: 10,
            log:      gutil.log
        } );
    
        var globs = ['../css/bootstrap.min.css'];
    
        return gulp.src( globs, { base: '.', buffer: false } )
            .pipe( conn.newer( '/public_html/[folder/on/server]/css/' ) ) // only upload newer files
            .pipe( conn.dest( '/public_html/[folder/on/server]/css/' ) );
    
    } );
    

    【讨论】:

    • 嘿@Mark Thanx 花时间回复,但是......我不太明白。 1. “在你的‘少’任务中投入回报”是什么意思? 2. 我应该将代码的哪一部分更改为what other bit?记住我是新手。
    • 我已修改您的代码以输入我的更改。顶部的 require 语句不会改变。
    • 嘿@Mark。非常感谢你。我隐约明白,希望以后能完全明白,但现在只需要说:它就像一个魅力!我可以在 Gulp 中使用它并对其进行修改以对其他网站执行相同的操作。所以谢谢! -- 汤姆
    • 不客气。您介意将答案标记为正确吗?它将帮助其他人看到它有效并增加了我的声誉。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多