每当更改js文件时调用闭包

时间:2016-12-03 10:57:29

标签: javascript gulp google-closure-compiler gulp-watch

我正在使用google-closure-compiler和gulp来缩小我的angularjs文件。

这是我的gulpfile代码;

var closureCompiler = require('google-closure-compiler').gulp();
var flatmap = require('gulp-flatmap');
var path = require('path');

gulp.task('js-closure', function () {
    return gulp.src(['app/js/*.js', 'dist/single.js'], {base: './'})
        .pipe(flatmap(function(stream, file) {
            return stream.pipe(closureCompiler({
                compilation_level: 'SIMPLE_OPTIMIZATIONS',
                warning_level: 'QUIET',
                language_in: 'ECMASCRIPT6_STRICT',
                language_out: 'ECMASCRIPT5_STRICT',
                output_wrapper: '(function(){\n%output%\n}).call(this)',
                js_output_file: path.basename(file.path).replace(/js$/, 'min.js')
            }))
        }))
        .pipe(gulp.dest('./dist/js'));
});

代码工作正常。但是,我必须在命令行上手动运行gulp js-closure来编译js文件。

我想在任何一个js文件发生更改时自动编译js文件。

编辑:gulp-watch似乎非常适合这个问题https://www.npmjs.com/package/gulp-watch。如何修改代码以使用gulp-watch?有什么好样例吗?

1 个答案:

答案 0 :(得分:1)

正如您所指出的,使用gulp-watch是正确的方法。一个简单的改变就足够了。

var closureCompiler = require('google-closure-compiler').gulp();
var flatmap = require('gulp-flatmap');    
var watch = require('gulp-watch');

gulp.task('js-closure', function () {
    return watch(['app/js/*.js', 'dist/single.js'], function()
    {
        gulp.src(['app/js/*.js', 'dist/single.js'], {base: './'})
            .pipe(flatmap(function(stream, file) {
                return stream.pipe(closureCompiler({
                    compilation_level: 'SIMPLE_OPTIMIZATIONS',
                    warning_level: 'QUIET',
                    language_in: 'ECMASCRIPT6_STRICT',
                    language_out: 'ECMASCRIPT5_STRICT',
                    output_wrapper: '(function(){\n%output%\n}).call(this)',
                    js_output_file: path.basename(file.path).replace(/js$/, 'min.js')
                }))
            }))
            .pipe(gulp.dest('./dist/js'));
    });
});