0

plovrが少し遅れており、毎回グーグルクローズをアップグレードするのが面倒になっているので、私は開発中にplovrの代替手段を見つけようとしています。gulpを使用してGoogleクローズランタイムを短縮する

だから私はガルプを使うことを考えました。 gulp接続を使用してgulpウェブサーバーを設定し、フォールバック時にGoogleクローズコンパイルをトリガーし、ファイルが生成されるのを待ってからクライアントに配信します。私が直面している問題は、コンパイル時間がplovr〜40s〜20sよりはるかに大きいことです。小さな変更の後にページが読み込まれるのを待つのに時間がかかるフロントエンド開発者のために。クロージャコンパイラのコンパイル時間を最適化するために何ができるか。 gulpfile.jsは私のセットアップについてのアイデアを伝えるためのものです。

var gulp = require('gulp'), 
    closureCompiler = require('google-closure-compiler').gulp({ 
     extraArguments: ['-Xms2048m'] 
    }), 
    fs = require('fs-extra'), 
    grepit = require('grepit'), 
    connect = require('gulp-connect'), 
    sleep = require('system-sleep'), 
    outputPath = './target/js', 
    pathToJavascriptCode = './project/', 
    compilationLevel = 'ADVANCED', 
    entryPoint = undefined; 

gulp.task('js-clean', function() { 
    fs.removeSync(outputPath); 
}); 

gulp.task('js-compile', function() { 
    var outputFileName = entryPoint + '.' + compilationLevel.toLowerCase() + '.js.compiled'; 
    return gulp.src([ 
    pathToJavascriptCode + '/**/*.js', 
    './node_modules/google-closure-library/closure/goog/**/*.js', 
    '!./node_modules/google-closure-library/closure/goog/**/*_test.js'], 
    {base: './'}) 
     .pipe(closureCompiler({ 
      closure_entry_point: entryPoint, 
      externs: [ 
       './public/javascripts/libs/jquery-1.7-externs.js'], 
      compilation_level: compilationLevel, 
      warning_level: 'VERBOSE', 
      js_output_file: './' + outputFileName, 
      manage_closure_dependencies: true, 
      language_in: 'ECMASCRIPT6', 
      language_out: 'ECMASCRIPT5' 
     })) 
     .pipe(gulp.dest(outputPath)) 
     .pipe(connect.reload()); 
}); 

gulp.task('webserver', function() { 
    connect.server({ 
     root: ['./target/js/'], 
     port: 8080, 
     livereload: true, 
     middleware: function() { 
      return [function(req, res, next) { 
       res.setHeader('Access-Control-Allow-Origin', '*'); 
       next(); 
      }]; 
     }, 
     fallback: function(req, res) { 
      var requestedFileName = req.url.replace('/', ''); 
      var requestedFileNameParts = requestedFileName.split('.'); 

      compilationLevel = requestedFileNameParts[3] === 'simple' ? 'SIMPLE' : 'ADVANCED'; 
      entryPoint = requestedFileNameParts[2] !== 'all' ? requestedFileNameParts.splice(0, 3).join('.') : undefined; 
      gulp.start('js-compile'); 

      var path = './target/js' + req.url; 
      while(fs.existsSync(path) !== true) { 
       console.log(path + ' does not exist yet, sleeping for 1 second'); 
       sleep(1000) 
      } 
      return path; 
     } 
    }) 
}); 


gulp.task('watch', function() { 
    gulp.watch('./project/pauljs/**/*.js', ['js-clean']); 
}); 

gulp.task('default', ['js-clean', 'webserver', 'watch']); 

は、私は、問題は、JVMの起動が遅く時間だと思い、いくつかの研究の後、私はGoogleの閉鎖コンパイラを実行するためにnailgunを使用して、この https://www.npmjs.com/package/closure-gunを見つけましたが、私は私の現在の設定でこれを統合する方法を確認していません、任意のポインタが理解されるであろう:)

答えて

関連する問題