Gulp 使用 WinSCP - livereload 及更少

Gulp with WinSCP - livereload and less

我在远程服务器上将 gulp 与 livereloadless 和其他人一起使用。 gulp我之前成功使用过很多次,没遇到过这种情况

我正在使用 WinSCP 来 save/edit 文件(我双击该文件,它在 Sublime Text 中打开...我保存它,WinSCP 自动将它上传回服务器)。

但是,这样做时 gulp-less 几乎总是失败。我有两个编译的核心 CSS 文件——一个是 Bootstrap,一个是我自己的——修改后它们都应该用自己的 gulp 任务编译——但是 Bootstrap每次都失败,另一个文件大约有一半失败。

当我说失败时,这就是我的意思 - Bootstrap 我总是得到同样的错误:

    variable @grid-columns is undefined in file ....grid.less line no. 48

即使我在主 Bootstrap "import" 文件中将 @grid-columns 定义为 first-heading,也会发生这种情况。

另一个失败的原因是 livereload 在编译 Less 文件之前的某个时间点重新加载已编译的 CSS。这应该是不可能的,但它以某种方式发生了。

但是,当我在 SSH 命令提示符下键入 touch myfile.lesstouch anybootstrapfile.less 时,一切正常。

显然这很烦人,但它宜居。我认为必须有一些方法来修复它。关于世界上有什么可以让这件事发生以及我可以做些什么(如果有的话)来解决它的任何想法?

有可能,当您在内部编辑器中保存文件后,WinSCP 上传文件时,它会将上传文件的时间戳设置为比之前更早的时间戳。

如果您使用的是 FTP 协议,或者 Windows Vista 或更早版本,这可能尤其正确。

详情请参考WinSCP FAQ:
Why are the changes, I upload to webserver, not visible in the web browser?

好的。在 Martin 的帮助下,我现在意识到他是 WinScp 的开发者,我已经解决了这个问题。我一直在使用 gulp.wait 插件并在最终重新加载之前插入一个暂停 - 但它没有用。

因为... 这不是问题所在。问题发生在上传时;因为文件很快就会变得 'touched' (或者有一些带有时间戳的东西最终导致功能等效)。

所以我将等待进程移动到 less 进程被调用之前:

gulp.src(src)
.pipe(plumber({
  errorHandler:onError
})
.pipe(wait(500))
.pipe(less())
//etc

我要试验一下,500 毫秒可能比需要的要长..但不会太长而不会痛苦。这立即解决了问题。

谢谢马丁!