= Closure Compiler = == 参考 == * [[http://d.hatena.ne.jp/unageanu/20110110/1294668273|Closure CompilerでタイプセーフJavaScriptコーディング]] * [[http://www37.atwiki.jp/aias-closurecompiler/|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ファイル {{{ .... .... }}} == コンパイルエラーとその対処 == === 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フォルダをダウンロードしていない。