缩小后修改缩小的js文件

时间:2015-07-07 12:26:11

标签: javascript maven minify anonymous-function bundling-and-minification

我在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>

修改 我可以通过将每个文件放在匿名函数和构建时,合并和缩小来实现这一点。但是我没有把它放在每个文件中,而是想把它放在合并文件上。

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

1 个答案:

答案 0 :(得分:1)

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

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

您可以使用maven-plugin,启用YUICompressor支持,然后编写一个自定义ObjectBuilderInspector,它将为聚合器指定包装您内容的自定义Transformer。< / p>

请在下面找到一些代码,您会找到文档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;
    }
}