Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在js文件更改时调用闭包_Javascript_Gulp_Google Closure Compiler_Gulp Watch - Fatal编程技术网

Javascript 在js文件更改时调用闭包

Javascript 在js文件更改时调用闭包,javascript,gulp,google-closure-compiler,gulp-watch,Javascript,Gulp,Google Closure Compiler,Gulp Watch,我正在使用google闭包编译器和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/j

我正在使用google闭包编译器和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'));
});
代码运行良好。但是,我必须在命令行上手动运行gulpjsclosure来编译js文件

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


编辑:GulpWatch似乎很适合解决这个问题。如何修改代码以使用gulp watch?有好的示例吗?

直接来自gulp api文档:

var watcher = gulp.watch(['app/js/*.js', 'dist/single.js'], ['js-closure']);
watcher.on('change', function(event) {
  console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
});

正如您所指出的,使用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'));
    });
});

您添加了gulp watch作为问题标签-这也是答案。谢谢提示。一些示例会有所帮助。