Search code examples
mavenmaven-3maven-pluginminify

How do I overcome "object literals cannot contain duplicate keys in ES5 strict mode" error with Maven minify plugin?


I'm using the Maven minify plugin with Maven 3.5. I have the below configuration ...

                <plugin>
                    <groupId>com.samaxes.maven</groupId>
                    <artifactId>minify-maven-plugin</artifactId>
                    <version>1.7.6</version>
                    <executions>
                        <execution>
                            <id>default-minify</id>
                            <phase>verify</phase>
                            <configuration>
                                <cssSourceIncludes>
                                    <cssSourceInclude>**/*.css</cssSourceInclude>
                                </cssSourceIncludes>
                                <cssTargetDir>../${project.artifactId}/css</cssTargetDir>
                                <jsSourceExcludes>
                                    <jsSourceExclude>lib/pdf.js</jsSourceExclude>
                                    <jsSourceExclude>lib/pdf.worker.js</jsSourceExclude>
                                    <jsSourceExclude>ckeditor_4.2/**</jsSourceExclude>
                                    <jsSourceExclude>geogebra/**</jsSourceExclude>
                                    <jsSourceExclude>contextMenu/**</jsSourceExclude>
                                    <jsSourceExclude>wPaint/**</jsSourceExclude>
                                </jsSourceExcludes>
                                <jsSourceIncludes>
                                    <jsSourceInclude>**/*.js</jsSourceInclude>
                                </jsSourceIncludes>
                                <jsTargetDir>../${project.artifactId}/js</jsTargetDir>
                                <jsEngine>CLOSURE</jsEngine>
                                <webappTargetDir>${project.build.outputDirectory}</webappTargetDir>
                                <skipMerge>true</skipMerge>
                                <nosuffix>true</nosuffix>
                            </configuration>
                            <goals>
                                <goal>minify</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

However, I'm getting this error on the below file ...

SEVERE: panel.js:845: ERROR -  with         

    SIDE_PANEL_BEGIN_CLOSE_EVENT:SIDE_PANEL_BEGIN_CLOSE_EVENT,
            ^

    Nov 27, 2018 2:57:06 PM com.google.javascript.jscomp.LoggerErrorManager printSummary
    WARNING: 1 error(s), 0 warning(s)

Everything works in my application fine with my uncompressed file so I'm thinking I just made a mistake with my configuration but I can't see what. How can I correct the configuration so that the optimization occurs without the error without affecting the underlying functionality of the code?


Solution

  • While Google's Closure Compiler (which is used under the hood by the minify plugin to optimize the source code) by default expects ECMAScript 6 as input language it seems to run additional diagnostic checks which do not take the language level into account.

    These diagnostic checks include one for ECMAScript 5 strict mode compliance which forbids duplicate keys in objects.

    As described in this answer by Sebstian Häger you can turn this diagnostic check of in the minify configuration by adding

    <closureWarningLevels>
        <es5Strict>OFF</es5Script>
    </closureWarningLevels>