Gulp任务在运行手动时输出正常,在gulp.watch中使用时输出失败
Gulp task outputs fine when run manually, fails to output when used in gulp.watch
我有一个 gulp 任务执行一些非常常见的任务 - 它 运行s jshint 来验证我的代码,然后连接并最小化文件并将它们输出到单个 .min.js 个文件。
当我手动 运行 时,任务(似乎)可以完美执行。但是第二次我尝试在 $gulp.watch 中使用它,它不再输出我的文件(尽管它仍然执行并执行 jshint)。
我任务中的代码:
gulp.src(path.join(workingPath, folder, '/*.js'))
.pipe(jshint())
.pipe(jshint.reporter(stylish))
.pipe(jshint.reporter('fail')) //stop build if errors found
.on('error', function() {
console.log("Please review and correct jshint errors.");
this.end();
})
.pipe(order([ //order files before concat - ensure module definitions are first
"*.module.js",
"*.js"
]))
.pipe(concat(filename+'.js'))
.pipe(gulp.dest(destinationPath)) //full combined version
.pipe(uglify())
.pipe(rename(filename+'.min.js'))
.pipe(gulp.dest(destinationPath)) //minified combined version
.on('error',function() {
console.log("An error occurred during Gulp processing.");
this.end();
});
我的gulp手表(任务名为'components'):
gulp.watch(componentsBasePath+"/**/*.js",['components']);
我注意到的一件事是在手册的末尾 运行 我看到了 "Process finished with exit code.."。如果我杀死我的 gulp.watch,它会输出 "Process finished with exit code.." - 然后它会创建输出文件!
我的目标是让我的 'components' 任务在每次被手表触发时创建这些输出文件 - 而不仅仅是在我关闭手表时。
谢谢!
悬崖
运行 这是别人的,他找到了问题的原因。虽然 - 事实证明它根本没有 Gulp 相关。
当我手动 运行 我的 'components' 任务时,我正在使用的 IDE 会立即更新文件夹和文件结构,但是当我 运行 gulp.watch 任务。我很高兴地报告虽然文件已成功创建,但在我终止任务之前它们从未出现在 IDE 中。
好吧,我用 jetbrains 解决这个问题的 hacky 方法(我使用的是 phpstorm),你必须理解两件事。
- gulp 观察者对文件保存采取行动。
- jetbrains 不会自动更新项目文件(因为您已经发现它使用缓存)。
为了解决这个问题,我创建了一个名为 saveSync 的宏,它执行以下操作:
- 全部保存
- 同步
- 同步
- 同步
为什么我同步了3次?因为 gulp 需要几秒钟才能完成任务(编译等),如果您在任务完成之前进行更新,显然项目视图无法正确更新。我还没有想出在宏本身中插入时间延迟的方法。
创建宏后,我只是将 ctrl + s
从全部保存到宏,然后就成功了。
如果有 'cleaner' 方法可以做到这一点,我还没有发现它。
我有一个 gulp 任务执行一些非常常见的任务 - 它 运行s jshint 来验证我的代码,然后连接并最小化文件并将它们输出到单个 .min.js 个文件。
当我手动 运行 时,任务(似乎)可以完美执行。但是第二次我尝试在 $gulp.watch 中使用它,它不再输出我的文件(尽管它仍然执行并执行 jshint)。
我任务中的代码:
gulp.src(path.join(workingPath, folder, '/*.js'))
.pipe(jshint())
.pipe(jshint.reporter(stylish))
.pipe(jshint.reporter('fail')) //stop build if errors found
.on('error', function() {
console.log("Please review and correct jshint errors.");
this.end();
})
.pipe(order([ //order files before concat - ensure module definitions are first
"*.module.js",
"*.js"
]))
.pipe(concat(filename+'.js'))
.pipe(gulp.dest(destinationPath)) //full combined version
.pipe(uglify())
.pipe(rename(filename+'.min.js'))
.pipe(gulp.dest(destinationPath)) //minified combined version
.on('error',function() {
console.log("An error occurred during Gulp processing.");
this.end();
});
我的gulp手表(任务名为'components'):
gulp.watch(componentsBasePath+"/**/*.js",['components']);
我注意到的一件事是在手册的末尾 运行 我看到了 "Process finished with exit code.."。如果我杀死我的 gulp.watch,它会输出 "Process finished with exit code.." - 然后它会创建输出文件!
我的目标是让我的 'components' 任务在每次被手表触发时创建这些输出文件 - 而不仅仅是在我关闭手表时。
谢谢!
悬崖
运行 这是别人的,他找到了问题的原因。虽然 - 事实证明它根本没有 Gulp 相关。
当我手动 运行 我的 'components' 任务时,我正在使用的 IDE 会立即更新文件夹和文件结构,但是当我 运行 gulp.watch 任务。我很高兴地报告虽然文件已成功创建,但在我终止任务之前它们从未出现在 IDE 中。
好吧,我用 jetbrains 解决这个问题的 hacky 方法(我使用的是 phpstorm),你必须理解两件事。
- gulp 观察者对文件保存采取行动。
- jetbrains 不会自动更新项目文件(因为您已经发现它使用缓存)。
为了解决这个问题,我创建了一个名为 saveSync 的宏,它执行以下操作:
- 全部保存
- 同步
- 同步
- 同步
为什么我同步了3次?因为 gulp 需要几秒钟才能完成任务(编译等),如果您在任务完成之前进行更新,显然项目视图无法正确更新。我还没有想出在宏本身中插入时间延迟的方法。
创建宏后,我只是将 ctrl + s
从全部保存到宏,然后就成功了。
如果有 'cleaner' 方法可以做到这一点,我还没有发现它。