如何使Gulp识别已编译文件中的更改/更新?

时间:2019-01-13 11:46:53

标签: node.js npm gulp

我正在构建一些站点,并且正在使用Gulp将其.scss文件编译为main.css文件。

一切正常,但有一个原因-Gulp似乎不知道main.css文件何时更新。

例如,如果我运行gulp sass并编译我的main.css文件,然后运行我的FTP部署脚本gulp ftp-deploy 、. scss文件(以及其他任何.html或.php我一直在处理的文件)将被部署,但main.css文件不会被部署。

如果我在IDE中打开main.css,Gulp只会识别出是否有更改,进行更改,例如添加空格或其他内容,然后保存。

当我同时运行Shopify ThemeKit的theme watch命令时,也会发生上述问题。

有人会知道我怎么做才能检测到变化吗?

我的gulpfile.js就是这样:

const gulp = require('gulp');
const sass = require('gulp-sass'); //Compiles SASS
const ftp = require( 'vinyl-ftp' ); //FTP

gulp.task('sass', function(){
  return gulp.src('scss/main.scss')
    .pipe(sass())
    .pipe(gulp.dest('css'))
});

gulp.task('ftp-deploy', function() {

  var conn = ftp.create({
    // CONFIG
  });

  var localFilesGlob = ['css/**']; 

  return gulp.src(localFilesGlob, { base: '.', buffer: false })
    .pipe( conn.newer( '.' ) )
    .pipe( conn.dest( '.' ) )
  ;

});

其他信息

node.js版本为11.6.0

npm版本是6.5.0

Gulp版本为4.0.0(2.0.1 CLI)

我在MacOS 10.14.2上

1 个答案:

答案 0 :(得分:0)

啊,我原本以为你在谈论某种gulp watch的行为;我错过了您的newer中的ftp-deploy行。

在我看来,这像是修改时间比较问题。这通常是由于本地计算机与服务器之间的时间差异(其中一个或另一个可能会关闭几分钟,从而导致任务中出现不稳定的行为)。另一种可能性是服务器位于不同的时区,并且使用本地时间而不是UTC。 S.O.的答案问题Gulp Vinyl FTP Timezone Issue可能会帮助您。

/css中手动编辑文件与运行gulp sass来重新生成文件之间应该没有区别;重要的是修改时间(运行ls -l css可以看到修改时间,这样您就可以知道正在查看的内容,并将其与服务器上的文件进行比较)。要注意的一件事是,仅重新运行gulp sass 而对SCSS文件没有任何更改将不会使用新的时间戳来更新/css中的文件。这是gulp的功能,可能会在您进行测试时使您绊倒。