使用ES5严格模式的Google Closure即使我指定了非严格模式(在minify-maven-plugin配置中)

时间:2017-01-03 20:10:15

标签: minify google-closure-compiler strict

我使用com.samaxes.maven minify-maven-plugin缩小了使用Google Closure支持的一些ES6功能编写的JS源文件集合。这是我POM中的相关配置:

<!-- minify-maven-plugin: Minification using Google Closure -->
<plugin>
    <groupId>com.samaxes.maven</groupId>
    <artifactId>minify-maven-plugin</artifactId>
    <version>1.7.6</version>
    <executions>
        <!-- Creation of the common-[version].js file -->
        <execution>
            <id>common-minify</id>
            <phase>prepare-package</phase>
            <configuration>
                <charset>UTF-8</charset>
                <jsSourceDir>.</jsSourceDir>
                <jsSourceFiles>
                    ...
                </jsSourceFiles>
                <jsFinalFile>./js/common-${project.version}.js</jsFinalFile>
                <jsEngine>CLOSURE</jsEngine>
                <closureLanguageIn>ECMASCRIPT6</closureLanguageIn>
                <closureLanguageOut>ECMASCRIPT5</closureLanguageOut>
            </configuration>
            <goals>
                <goal>minify</goal>
            </goals>
        </execution>

        <!-- 2 other similarly configured executions are here. -->
        ...

    </executions>
</plugin>

问题是,当我运行maven目标这个配置时,我收到以下错误消息:

[INFO] Creating the merged file [common-1.8.24.js].
[INFO] Creating the minified file [common-1.8.24.min.js].
Jan 03, 2017 12:03:06 PM com.google.javascript.jscomp.LoggerErrorManager println
SEVERE: [1mcommon-1.8.24.js:5577: [31mERROR[39m - object literals cannot contain duplicate keys in ES5 strict mode[0m
    supportsDataForwarding: function () {
    ^ 

我认为Google Closure正在尝试使用ES5严格模式进行编译,即使我在ECMASCRIPT5选项(see doc here)中指定了非严格<closureLanguageOut>模式。为什么不禁用严格模式?

1 个答案:

答案 0 :(得分:1)

我有同样的问题,并找到了一种方法让minify-maven-plugin不会失败,以防它抱怨ES5严格模式:

<plugin>
<groupId>com.samaxes.maven</groupId>
<artifactId>minify-maven-plugin</artifactId>
<version>1.7.6</version>
<executions>
    <execution>
        <id>default-minify</id>
        <phase>process-resources</phase>
        <configuration>
            <charset>UTF-8</charset>                
            <closureWarningLevels>
                <es5Strict>OFF</es5Strict>
            </closureWarningLevels>
            ...
        </configuration>
        <goals>
            <goal>minify</goal>
        </goals>
    </execution>
</executions>

您可以使用以下文档How to tell closure compiler which warnings you want进一步微调。希望这会有所帮助:)