【问题标题】:gulp watch - one file - concats only the half part of one filegulp watch - 一个文件 - 只连接一个文件的一半
【发布时间】:2016-12-17 06:52:24
【问题描述】:

这个问题...

...记得我的另一个人,但似乎不同。 (在code 之后向下滚动,看看我的意思)

我在其他项目中对gulp-watch 没有真正的问题,特别是因为我修复了一个类似的问题。 (你可以在这篇文章的末尾找到)

但在这个项目(更大的网络应用程序)中,我认为 nodejs/gulp-watch 达到了他的极限。

我从 gulp(通过 gulp-watch)获得的 JS 文件在多次触发时似乎已损坏。

Javascript 文件...

  • ...当我通过gulp 命令使用默认任务时,没有损坏。
  • ...在观察事件第一次识别到更改时没有损坏。
  • ...通常是损坏的,毕竟在监视事件的触发任务之后。

我比较了生成的 JS 文件的好坏(损坏),发现一个文件丢失了一半的内容。

意思:

它在 JS 文件的中间停止并继续下一个 JS 文件。 (只连接一半的js文件)

之前和之后的所有其他 JS 文件都连接在一起而不会丢失。

有谁知道这个问题并知道如何解决?

我已经试过了……

  • ...以 500 毫秒的延迟添加 gulp-wait,但这没有效果。
  • ...检查此位置的代码是否错误,但似乎有效。
  • ...重启机器。

环境: Debian Jessie 上的 NodeJS 4.4.7。

终端输出: 这 8 个启动脚本任务不会立即触发。这是在保存文件并将其上传到 Gulp 正在监视的服务器和目录时检测到的不同更改。 (箭头、工作和失败的文本不是输出的一部分)

user@host: /path/to/vhost/public$ gulp watch
[20:09:02] Using gulpfile /path/to/vhost/public/gulpfile.js
[20:09:02] Starting 'watch'...
[20:09:02] Finished 'watch' after 25 ms
[20:09:32] Starting 'scripts'...
[20:09:32] Finished 'scripts' after 84 ms <- worked
[20:09:49] Starting 'scripts'...
[20:09:49] Finished 'scripts' after 51 ms <- failed
[20:09:51] Starting 'scripts'...
[20:09:51] Finished 'scripts' after 38 ms <- failed
[20:09:53] Starting 'scripts'...
[20:09:54] Finished 'scripts' after 68 ms <- worked
[20:10:01] Starting 'scripts'...
[20:10:02] Finished 'scripts' after 63 ms <- worked
[20:10:18] Starting 'scripts'...
[20:10:19] Finished 'scripts' after 59 ms <- failed
[20:10:35] Starting 'scripts'...
[20:10:35] Finished 'scripts' after 52 ms <- worked
[20:10:53] Starting 'scripts'...
[20:10:54] Finished 'scripts' after 58 ms <- failed

gulpfile.js:

/////////////
// INCLUDE //
/////////////

var gulp = require('gulp');

// Plugins
var autoprefixer = require('gulp-autoprefixer');
var concat = require('gulp-concat');
var rename = require('gulp-rename');
var sass = require('gulp-ruby-sass');
var uglify = require('gulp-uglify');
var expect = require('gulp-expect-file');

// Globals
var jsFiles = ['js/custom1.js',
             'js/custom2.js',
             'js/custom3.js',
             'js/custom4.js',
             'js/custom5.js',
             'js/custom6.js',
             'js/custom7.js',
             'js/custom8.js',
             'js/custom9.js',
             'js/custom10.js',
             'js/custom11.js',
             'js/custom12.js',
             'js/custom13.js',
             'js/custom14.js',
             'js/custom15.js',
             'js/custom16.js',
             'js/custom17.js',
             'js/custom18.js'];

var cssFiles = ['scss/style.scss'];



///////////
// TASKS //
///////////

// FILES
gulp.task('files', function() {
  var files = cssFiles.concat(jsFiles);
  return gulp.src(files)
    .pipe(expect(files));
});

// SCRIPTS
gulp.task('scripts', function() {
    return gulp.src(jsFiles)
        .pipe(concat('script.js'))
        .pipe(rename({suffix: '.min'}))
        // .pipe(uglify())
        .pipe(gulp.dest(''));
});

// SASS
gulp.task('sass', function() {
    return sass(cssFiles, {style: 'compressed'})
        .pipe(autoprefixer({
            browsers: ['last 2 versions'],
            cascade: false
        }))
        .pipe(rename({suffix: '.min'}))
        .pipe(gulp.dest(''));
});

// DEFAULT
gulp.task('default', ['files','scripts', 'sass']);

// WATCH
gulp.task('watch', function() {
    // Watch .js files
    gulp.watch(jsFiles, ['scripts']);
    // Watch .scss files
    gulp.watch(cssFiles, ['sass']);
});

让我想起另一个错误

两个月前,我遇到了类似的错误,仅在触发监视任务时才起作用。之后,您必须重新启动命令。奇怪的是,在终端中没有任何错误消息,它的响应好像它可以工作一样。但结果是一个空的 css 文件。

fixed this OLD issue 将我的 nodejs 安装从 0.12.x 更新到 4.x.x。

但目前的问题似乎有所不同。

【问题讨论】:

    标签: node.js gulp gulp-watch gulp-concat


    【解决方案1】:

    从您的日志来看,scripts 的运行似乎过于频繁,这可能会导致冲突。您是否正在将您的连接文件输出到源文件夹,重新触发任务?

    .pipe(gulp.dest(''));
    

    如果你输出到不同的文件夹会发生什么?

    .pipe(gulp.dest('dist/'));
    

    【讨论】:

    • 不,有误会。终端输出没有立即触发,那是不同的保存。这就是为什么我在其中添加了工作/失败的市场。我在我的帖子中解决了这个问题。感谢您的建议,我尝试更改您所写的目的地,但没有帮助。
    【解决方案2】:

    找到原因及解决办法:

    gulp-watch 快速触发并在通过 FTP 上传未完成时执行。

    所以gulp-watch 不能改变您的上传方法...并且在识别到更改时触发。而是等到完整文件上传成功。

    解决方案是更改您的 FTP 客户端的上传方法,或者只是选择另一个可以识别的观察者。 (我现在使用 when-changed * )。

    当我在保存时上传文件时,这个东西会切换两次。这是一个很好的指标,表明 SFTP 似乎在部分上传数据。所以我现在将阅读如何更改 Sublime SFTP 中的上传方法。 (这样我就可以再次切换回gulp-watch

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-19
      • 1970-01-01
      • 2015-02-23
      • 2015-05-28
      • 2019-06-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多