使用gulp和google closure将js文件编译成单个文件而不是单个文件

use*_*486 1 javascript google-closure google-closure-compiler gulp

我正在使用google-closure-compilergulp来缩小我的angularjs文件.

我在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'));
});
Run Code Online (Sandbox Code Playgroud)

代码的作用是将3个js文件编译成单个文件 output.min.js

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

Sve*_*ung 7

据我所知,没有办法避免通过Google Closure Compiler合并你的文件.即使您省略了该js_output_file选项,它也只是默认为输出文件名compiled.js.这意味着您必须为每个文件调用Closure Compiler.

gulp-flatmap插件可让您轻松完成.您只需确定js_output_file每个输入文件的值(基本上替换.js.min.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'));
});
Run Code Online (Sandbox Code Playgroud)