我在JavaScript文件中套用了缩小字词。我想用

(function(){文件内容在这里})()

要么

我可以通过任何其他方式实现这一目标。

基本上,我希望我的文件被匿名包装。

我正在使用以下Maven插件。

<plugin>
    <groupId>net.alchim31.maven</groupId>
    <artifactId>yuicompressor-maven-plugin</artifactId>
    <configuration>
        <preProcessAggregates>true</preProcessAggregates>
        <encoding>UTF-8</encoding>
        <disableOptimizations>false</disableOptimizations>
        <failOnWarning>false</failOnWarning>
        <force>true</force>
        <gzip>false</gzip>
        <nomunge>true</nomunge>
        <jswarn>false</jswarn>
        <nosuffix>true</nosuffix>
        <useProcessedResources>true</useProcessedResources>
        <aggregations>
            <aggregation>
                <insertNewLine>false</insertNewLine>
                <output>${basedir}/target/web/js/minified.js</output>
                <inputDir>${basedir}/src/main/webapp/js/app</inputDir>
                <includes>
                    <include>*.js</include>
                </includes>
            </aggregation>
        </aggregations>
        <excludes>
            <exclude>**/lib/**</exclude>
            <exclude>**/*-min.js</exclude>
            <exclude>**/*.min.js</exclude>
            <exclude>**/*-min.css</exclude>
            <exclude>**/*.min.css</exclude>
        </excludes>
        <sourceDirectory>${basedir}/target</sourceDirectory>
        <outputDirectory>${basedir}/target</outputDirectory>
    </configuration>
</plugin>


编辑
我可以通过将每个文件置于匿名函数中并在构建时进行合并和最小化来实现。但是,我不想将其放置在每个文件中,而是只将其放置在合并的文件中。

我想包装匿名函数,以便无法通过控制台访问代码。

最佳答案

您应该使用资产管道工具来对您的配置进行深入控制。

您可以考虑使用WUIC并根据需要对其进行扩展。

您可以使用maven-plugin,启用YUICompressor支持,然后只编写一个自定义ObjectBuilderInspector即可,该自定义Transformer将用于包装内容的自定义指定给聚合器。

请在下面找到一些代码,您将找到文档here以及示例herehere

pom.xml

<build>
    <plugins>
        <plugin>
            <groupId>com.github.wuic.plugins</groupId>
            <artifactId>static-helper-maven-plugin</artifactId>
            <version>${project.version}</version>
            <executions>
                <execution>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>process</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <xml>src/main/resources/wuic.xml</xml>
                <properties>src/main/resources/wuic.properties</properties>
                <output>${project.build.finalName}</output>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>com.github.wuic.extensions</groupId>
                    <artifactId>wuic-yuicompressor</artifactId>
                    <version>${project.version}</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>


wuic.xml:



<wuic>
    <heaps>
        <heap id="scripts">
            <nut-path>*/lib/*</nut-path>
            <nut-path>*/*-min.js</nut-path>
            <nut-path>*/*.min.js</nut-path>
            <nut-path>*/*-min.css</nut-path>
            <nut-path>*/*.min.css</nut-path>
        </heap>
    </heaps>
</wuic>


wuic.properties

# for resources in classpath (src/main/resources)
c.g.wuic.dao.wildcard=true
c.g.wuic.dao.basePath=/js/app
c.g.wuic.facade.additionalBuilderInspectorClasses=com.your.app.MyInspector


您的自定义变压器已插入,这要感谢检查员

public class MyInspector implements ObjectBuilderInspector, Pipe.Transformer<ConvertibleNut> {

        @Override
    public <T> T inspect(T object) {
        if (object instanceof TextAggregatorEngine) {
            TextAggregatorEngine.class.cast(object).addTransformer(this);
        }

        return object;
    }

    @Override
    public void transform(InputStream is, OutputStream os, ConvertibleNut convertible) throws IOException {
        if (convertible.getNutType().equals(NutType.JAVASCRIPT)) {
            os.write("(function(){".getBytes());
            IOUtils.copyStream(is, os);
            os.write("})();".getBytes());
        } else {
            IOUtils.copyStream(is, os);
        }
    }

    @Override
    public boolean canAggregateTransformedStream() {
        return false;
    }
}

07-24 09:47
查看更多