【问题标题】:Modify minified js file after minification缩小后修改缩小的js文件
【发布时间】:2015-07-07 12:26:10
【问题描述】:

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

编辑 我可以通过将每个文件放在匿名函数中并在构建时合并和缩小来实现这一点。但是我不想把它放在每个文件中,我只想把它放在合并文件中。

我想封装匿名函数,这样代码就不能通过控制台访问了。

【问题讨论】:

  • 您为什么要这样做?我需要了解才能更好地帮助您
  • 请看我编辑的问题。

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


【解决方案1】:

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

您可以考虑使用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;
    }
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    相关资源
    最近更新 更多