2016-12-03 66 views
1

我正在使用google-closure-compiler和gulp来缩小我的angularjs文件。使用谷歌关闭gulp编译成单个文件而不是单个文件的js文件

我在app/js文件夹中有3个js文件。他们是controller.js, app.js, services.js

这里是我的gulpfile代码:

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

gulp.task('js-closure', function() { 
    return gulp.src('app/js/*.js', {base: './'}) 
     .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: 'output.min.js' 
     })) 
     .pipe(gulp.dest('./dist/js')); 
}); 

什么代码所做的是编译3个JS文件合并为一个文件output.min.js

我想是到3个js文件编译成3点独立的js文件controller.min.js, app.min.js, services.min.js

回答

5

据我所见,无法避免让Google Closure编译器合并文件。即使你忽略了js_output_file选项,它也只是默认为输出文件名compiled.js。这意味着你必须为每个文件调用Closure Compiler。

gulp-flatmap插件让你轻松做到这一点。你只需要确定的js_output_file每个输入文件中的值(基本上在每个文件名与.min.js替换.js):

var flatmap = require('gulp-flatmap'); 
var path = require('path'); 

gulp.task('js-closure', function() { 
    return gulp.src('app/js/*.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')); 
}); 
+0

谢谢!我已经测试过你的答案完美。 Upvoted并选择作为正确的答案。 – user781486

+0

您可以使用代码分割来创建单独的输出文件,但不清楚这是否是意图。对于不相关的文件,你需要分别为每个文件调用编译器(如本答案所示)。 –

相关问题