Locked History Actions

Closure_Library/Compiler

Closure Compiler

参考

重要なTIPS

exportSymbolを使うこと!

Closure CompilerはオプションによってObfuscationを行うが、(これはJava等の他の言語でも同じだが)obfuscationを行うと元の名称は存在しなくなってしまう。もし.jsファイルの中で定義されたnamespaceをhtmlファイルの中でも使用したい場合にはexportSymbol指定をしなければならない。例えば

.jsファイル

goog.provide("my.name.space.Sample");
my.name.space.Sample = function() {
};
goog.exportSymbol("my.name.space.Sample", my.name.space.Sample);

.htmlファイル

....
  <script type="text/javascript">
    new my.name.space.Sample();
  </script>
....

コンパイルエラーとその対処

goog.debug.ErrorHandlerでエラー

     [exec] WebContent\closure-library\closure\goog\events\events.js:895: WARNING - Bad type annotation. Unknown type goog.debug.ErrorHandler
     [exec]  * @param {goog.debug.ErrorHandler} errorHandler Error handler with which to
     [exec]            ^
     [exec] 0 error(s), 1 warning(s), 96.1% typed
     [exec] C:\Users\admin\Desktop\eclipse-js\closurePrimer\WebContent\closure-library\closure\bin\build\closurebuilder.py: JavaScript compilation succeeded.

これはどうしようもないようだ。--jscomp_error=checkVarsをjscomp_warningに変更

goog.async.Deferred

     [exec] depstree.NamespaceNotFoundError: Namespace "goog.async.Deferred" never provided. Required in Source WebContent\closure-library\closure\goog\fs\filereader.js

thrird_partyをダウンロードし忘れている。 closure libraryをsubversionからダウンロードするとき、closure以下のみをダウンロードして、その兄弟フォルダのthird_partyフォルダをダウンロードしていない。