Panda Noir

JavaScript の限界を究めるブログでした。最近はいろんな分野を幅広めに書いてます。

Closure Compilerが遅すぎるので早くする

google-closure-compilerここにガッツリ書いてありましたが、今まで気づいていませんでした。だいたい今まで8秒かかっていたところが2秒に縮まりました。4倍早くなった計算です。

動作環境

公式によれば「OS X とLinuxをサポートしている」とのことです。

必要なもの

  • Java
  • gccの最新版
  • Mavenの最新版
  • closure-gun(npmパッケージ)

これだけです。Ubuntu 17.10ではきちんと動きました。なぜかCentOS7.2ではまだ入れることができていません。助けてください。 (追記: Javaのバージョンを9.0.0から 9.0.4にしたらCentOSでも動きました)

gccとMavenは最新版でなくてもいいかもしれません。Javaは9.0.1をインストールしたら動くことは確認しました。

gccとMavenをインストールする

この辺は各自で行ってください。

closure-gunをインストールする

ここが鬼門です。なかなか入ってくれません。インストールは次のコマンドで行います。

$ npm install closure-gun

もしコケたら

  • node_modules/を消して$ npm installしなおす
  • gccとMavenをアップデートする

このどちらかを試してみてください。Ubuntuはそれでなんとかなりました。CentOSはまだ解決していません。

使い方

google-closure-compilerに書いてあるとおりです。

Gulp

const compilerPackage = require('google-closure-compiler');
const closureCompiler = compilerPackage.gulp();
 
compilerPackage.compiler.JAR_PATH = undefined;
compilerPackage.compiler.prototype.javaPath = './node_modules/.bin/closure-gun';

注意点としては、compilerPackage.gulp()の際に{extraArguments: ['-Xms2048m']}などは渡せないということです。これらの引数は通常javaの引数として渡されますが、今回はjavaPathを変えているのでclosure-gunに渡されてしまいます。closure-gunには-Xms2048mという引数は渡せないのでエラーが置きます。

2018/2/10 追記:

CentOSへのインストールですが、ゴリ押ししたらできました。エラーは依然として起きるのですが、Makefileに書いてあるコマンドを、エラーが起きなかったものとして実行したら普通に使えました。何が起きてるのかよくわかりません。

詳しい状況を書くとこんな感じです。

  1. Makefileでnailgunを生成しようとするとエラーが起きる
  2. make ng -C "./tmp/nailgun-denji-0.9.2" && mvn package --quiet -f "./tmp/nailgun-denji-0.9.2/nailgun-server/pom.xml"でエラーが起きてるっぽい
  3. しかしtmp/フォルダに必要そうなものは生成されている
  4. mv "./tmp/nailgun-denji-0.9.2/nailgun-server/target/nailgun-server-0.9.2.jar" "./nailgun/nailgun.jar"以降を漸次実行すると普通に使える形になった

きちんと実行に必要なファイルは生成されているようなので、なんでエラーが起きているのかよくわかりません。まあ解決できたので良しとしました。