首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有wro4j和谷歌闭包编译器的ECMASCRIPT 5

带有wro4j和谷歌闭包编译器的ECMASCRIPT 5
EN

Stack Overflow用户
提问于 2012-12-14 11:22:57
回答 2查看 887关注 0票数 4

我们正在使用带有谷歌闭包和Maven的wro4j来缩小我们的JS。默认情况下,它不支持JS中的严格模式("use strict";)..它只是把它去掉了。有没有什么配置可以让我在pom.xml或其他地方把use strict留在那里?

这是google closure编译器的配置:

代码语言:javascript
复制
--language_in=ECMASCRIPT5_STRICT

不知道怎么把它插到Wro4j上。有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2013-01-09 03:28:18

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

代码语言:javascript
复制
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节点的值:

代码语言:javascript
复制
<configuration>
  <wroManagerFactory>com.mycompany.MyCustomWroManagerFactory</wroManagerFactory>
</configuration>

根据闭包编译器项目的John Lenz的说法,如果您直接使用Compiler API,则应该指定一个CodingConvention。

参考

票数 1
EN

Stack Overflow用户

发布于 2018-01-25 20:02:16

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

您需要添加两个Java类。首先覆盖GoogleClosureCompressorProcessornewCompilerOptions,如下所示:

代码语言:javascript
复制
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。这是因为它是私人的。为了以防万一,我还添加了setEncoding

然后我们需要自定义管理器:

代码语言:javascript
复制
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;
    }
}

然后在wroManagerFactory中的pom.xml中使用它。大概是这样的:

代码语言:javascript
复制
        <plugin>
            <groupId>ro.isdc.wro4j</groupId>
            <artifactId>wro4j-maven-plugin</artifactId>
            <version>1.8.0</version>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
            <!-- Google Closure Compiler -->
            <!-- http://www.gzfs020.com/using-google-closure-compiler-with-wro4j-maven-plugin.html -->
            <configuration>
                <contextFolder>${basedir}/src/main</contextFolder>
                <wroFile>${basedir}/src/main/config/wro.xml</wroFile>
                <destinationFolder>${project.build.directory}/${project.build.finalName}/min</destinationFolder>
                <!--
                <wroManagerFactory>ro.isdc.wro.extensions.manager.standalone.GoogleStandaloneManagerFactory</wroManagerFactory>
                -->
                <wroManagerFactory>com.example.package.wro.CustomWroManagerFactory</wroManagerFactory>
            </configuration>
        </plugin>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13872186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档