使用wro4j和Google Closure编译器的ECMASCRIPT 5

时间:2012-12-14 03:22:57

标签: maven google-closure-compiler ecmascript-5 wro4j

我们正在使用wro4j和Google Closure以及Maven来缩小我们的JS。默认情况下,它不支持JS中的严格模式(“use strict”;)..它只是删除它。我可以在pom.xml或其他地方执行任何配置,让它在use strict离开吗?

这是谷歌关闭编译器的配置:

--language_in=ECMASCRIPT5_STRICT

不确定如何将其插入Wro4j。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

创建管理工厂的自定义实现,添加ECMAScript5

public class MyCustomWroManagerFactory
extends DefaultStandaloneContextAwareManagerFactory
  {
  @Override 
    protected ProcessorsFactory newProcessorsFactory() 
      {
      final SimpleProcessorsFactory factory = new SimpleProcessorsFactory(); 

      factory.addPreProcessor(
           new GoogleClosureCompressorProcessor(
             CompilerOptions.LanguageMode.ECMASCRIPT5_STRICT
                                               )
                        ); 

      return factory;
      }
  }

在pom.xml中引用它作为wroManagerFactory节点的值:

<configuration>
  <wroManagerFactory>com.mycompany.MyCustomWroManagerFactory</wroManagerFactory>
</configuration>
  

Closure Compiler项目的John Lenz表示,如果您直接使用编译器API,则应指定CodingConvention。

<强>参考

答案 1 :(得分:1)

wro4j-maven-plugin 1.8中它有点复杂,但并不是那么糟糕。

您需要添加两个Java类。首先覆盖newCompilerOptions的{​​{1}},如下所示:

GoogleClosureCompressorProcessor

您注意到我已对package com.example.package.wro; import com.google.javascript.jscomp.CheckLevel; import com.google.javascript.jscomp.ClosureCodingConvention; import com.google.javascript.jscomp.CompilerOptions; import com.google.javascript.jscomp.DiagnosticGroups; import java.nio.charset.Charset; import org.apache.commons.lang3.CharEncoding; import ro.isdc.wro.extensions.processor.js.GoogleClosureCompressorProcessor; /** * Custom processor overriding `newCompilerOptions` to add custom compiler options. * * Original author: Alex Objelean. */ public class CustomGoogleClosureCompressorProcessor extends GoogleClosureCompressorProcessor { /** * Encoding to use. */ public static final String ENCODING = CharEncoding.UTF_8; @Override protected CompilerOptions newCompilerOptions() { final CompilerOptions options = new CompilerOptions(); // Set the language_in option on the Google Closure Compiler to prevent errors like: // "JSC_TRAILING_COMMA. Parse error. IE8 (and below)" options.setLanguageIn(CompilerOptions.LanguageMode.ECMASCRIPT5); /** * According to John Lenz from the Closure Compiler project, if you are using the Compiler API directly, you should * specify a CodingConvention. {@link http://code.google.com/p/wro4j/issues/detail?id=155} */ options.setCodingConvention(new ClosureCodingConvention()); // use the wro4j encoding by default //options.setOutputCharset(Charset.forName(getEncoding())); setEncoding(ENCODING); options.setOutputCharset(Charset.forName(ENCODING)); // set it to warning, otherwise compiler will fail options.setWarningLevel(DiagnosticGroups.CHECK_VARIABLES, CheckLevel.WARNING); return options; } } 行进行了评论。这是因为它是私人的。我还添加了getEncoding以防万一。

然后我们需要Custom manger:

setEncoding

然后在package com.example.package.wro; import ro.isdc.wro.manager.factory.standalone.DefaultStandaloneContextAwareManagerFactory; import ro.isdc.wro.model.resource.processor.factory.ProcessorsFactory; import ro.isdc.wro.model.resource.processor.factory.SimpleProcessorsFactory; /** * Custom manger adding custom processor. */ public class CustomWroManagerFactory extends DefaultStandaloneContextAwareManagerFactory { @Override protected ProcessorsFactory newProcessorsFactory() { final SimpleProcessorsFactory factory = new SimpleProcessorsFactory(); factory.addPreProcessor( new CustomGoogleClosureCompressorProcessor() ); return factory; } } 的{​​{1}}中使用它。像这样:

pom.xml