2016-12-03 11 views
1

私はgoogle-closure-compilerを使用しており、gulpを使用してangularjsファイルを縮小しています。gulpを使用してGoogleクローズで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')); 
}); 

何のコードはありませんが、私が欲しいoutput.min.js

単一のファイルに3つのjsファイルをコンパイルすると、3つの別々のJSに3つのJSファイルをコンパイルすることですファイルcontroller.min.js, app.min.js, services.min.js

答えて

5

私の知る限り、ファイルをGoogle Closure Compilerで結合しないようにする方法はありません。 js_output_fileオプションを省略したとしても、デフォルトで出力ファイル名はcompiled.jsになります。つまり、ファイルごとにClosure Compilerを起動する必要があります。

gulp-flatmapプラグインを使用すると、簡単にそのことができます。あなただけの(基本的には、各ファイル名に.min.js.jsを置き換える)各入力ファイルについてjs_output_fileの値を決定する必要があります。

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

感謝を!私はあなたの答えが完全に働くことをテストしました。右の答えとして選出され、選出されました。 – user781486

+0

コード分割を使用して別々の出力ファイルを作成することはできますが、これが意図であることは明らかではありません。無関係なファイルについては、コンパイラを個別に呼び出す必要があります(この回答が示すとおりです)。 –

関連する問題