【问题标题】:Javascript bundle obfuscation and BundletransformerJavascript捆绑混淆和Bundletransformer
【发布时间】:2014-04-06 13:15:12
【问题描述】:

我试图在运行中混淆我们的 JavaScript 包的输出并遇到 bundletransformer(一个使用 YUI 压缩器的捆绑扩展),但没有成功实现它!到目前为止,通过阅读提供的documentation,我已经在 RegisterBundles 方法中编写了以下代码:

        var nullBuilder = new NullBuilder();           
        var cssTransformer = new CssTransformer();

        var yuiSettings = new BundleTransformer.Yui.Configuration.YuiSettings();
        yuiSettings.JsMinifier.ObfuscateJavascript = true;

        var jsTransformer = new JsTransformer();

        var nullOrderer = new NullOrderer();

        var scriptBundle = new CustomScriptBundle("~/jscbundle/").Include(
                      "~/Assets/Scripts/jquery.js",
                      "~/Assets/Scripts/jquery-ui.js");

        scriptBundle.Builder = nullBuilder;
        scriptBundle.Orderer = nullOrderer;


        scriptBundle.Transforms.Add(jsTransformer);

        bundles.Add(scriptBundle);

以及 web.config 中的以下代码:

<bundleTransformer xmlns="http://tempuri.org/BundleTransformer.Configuration.xsd">
<core>
  <css>
    <minifiers>
      <add name="NullMinifier" type="BundleTransformer.Core.Minifiers.NullMinifier, BundleTransformer.Core" />
      <add name="YuiCssMinifier" type="BundleTransformer.Yui.Minifiers.YuiCssMinifier, BundleTransformer.Yui"  />
    </minifiers>
    <translators>
      <add name="NullTranslator" type="BundleTransformer.Core.Translators.NullTranslator, BundleTransformer.Core" enabled="false" />
    </translators>
  </css>
  <js defaultMinifier="YuiJsMinifier" usePreMinifiedFiles="true">
    <minifiers>
      <add name="NullMinifier" type="BundleTransformer.Core.Minifiers.NullMinifier, BundleTransformer.Core" />
      <add name="YuiJsMinifier" type="BundleTransformer.Yui.Minifiers.YuiJsMinifier, BundleTransformer.Yui" />
    </minifiers>
    <translators>
      <add name="NullTranslator" type="BundleTransformer.Core.Translators.NullTranslator, BundleTransformer.Core" enabled="false" />
    </translators>
  </js>
</core>
<yui>
  <css compressionType="Standard" removeComments="true" lineBreakPosition="-1" />
  <js compressionType="Standard" obfuscateJavascript="true" preserveAllSemicolons="false" disableOptimizations="false" ignoreEval="false" severity="0" lineBreakPosition="-1" encoding="UTF8" threadCulture="en-us" />
</yui>

从捆绑输出来看,我可以推断出它不仅没有被混淆,而且压缩根本没有生效!我在网上找不到任何示例,并尝试在这里和那里更改一些设置,但没有运气!所以我很无知,任何解决方案或建议将不胜感激。提前致谢!

【问题讨论】:

    标签: javascript asp.net-mvc obfuscation bundling-and-minification bundletransformer


    【解决方案1】:

    巴哈多,

    其实我们只需要很简单的代码:

    namespace TestYui
    {
        using System.Web.Optimization;
    
        using BundleTransformer.Core.Bundles;
        using BundleTransformer.Core.Orderers;
    
        public class BundleConfig
        {
            public static void RegisterBundles(BundleCollection bundles)
            {
                var nullOrderer = new NullOrderer();
    
                var scriptBundle = new CustomScriptBundle("~/jscbundle/");
                scriptBundle.Include(
                    "~/Assets/Scripts/jquery.js",
                    "~/Assets/Scripts/jquery-ui.js");
                scriptBundle.Orderer = nullOrderer;
    
                bundles.Add(scriptBundle);
            }
        }
    }
    

    以及Web.config文件中的设置:

    <configuration>
        …
        <bundleTransformer xmlns="http://tempuri.org/BundleTransformer.Configuration.xsd">
            <core>
                <css>
                    <minifiers>
                        <add name="NullMinifier" type="BundleTransformer.Core.Minifiers.NullMinifier, BundleTransformer.Core" />
                        <add name="YuiCssMinifier" type="BundleTransformer.Yui.Minifiers.YuiCssMinifier, BundleTransformer.Yui" />
                    </minifiers>
                    <translators>
                        <add name="NullTranslator" type="BundleTransformer.Core.Translators.NullTranslator, BundleTransformer.Core" enabled="false" />
                    </translators>
                </css>
                <js defaultMinifier="YuiJsMinifier">
                    <minifiers>
                        <add name="NullMinifier" type="BundleTransformer.Core.Minifiers.NullMinifier, BundleTransformer.Core" />
                        <add name="YuiJsMinifier" type="BundleTransformer.Yui.Minifiers.YuiJsMinifier, BundleTransformer.Yui" />
                    </minifiers>
                    <translators>
                        <add name="NullTranslator" type="BundleTransformer.Core.Translators.NullTranslator, BundleTransformer.Core" enabled="false" />
                    </translators>
                </js>
            </core>
        </bundleTransformer>
        …
    </configuration>
    

    实际上,问题是由于 Web 应用程序在调试模式下运行造成的。

    使用 Web.config 文件中的以下设置将 Web 应用程序切换到发布模式:

    <configuration>
      …
      <system.web>
        <compilation debug="false"  … />
        …
      </system.web>
      …
    </configuration>
    

    或者在App_Start\BundleConfig.cs文件中添加以下代码:

    BundleTable.EnableOptimizations = true;
    

    在阅读 Bundle Transformer 的文档之前,我建议阅读 ASP.NET MVC 4 tutorial 的章节 “Bundling and Minification”。

    【讨论】:

    • 感谢您的回复,并对代码混乱感到抱歉,因为我说我一无所知并试图手动设置设置...所以无论如何我都会使用您提供的代码再次尝试并将很快在这里报告。顺便说一句,调试已设置为“false”,EnableOptimizations 已设置为“true”。
    • 亲爱的@Andrey,不幸的是结果还是一样,我还注意到您提供的代码不包含任何关于混淆的设置,我还在后面添加了 标签 标签就像我原来的问题中提到的那样,但无论哪种方式,结果仍然看起来缩小但没有混淆,并且 cmets 也没有被删除。您能否建议一种调试 YUI 模块是否被调用的方法?或任何调试过程的方法?非常感谢您的帮助。
    • 我刚刚注意到你提供的bundler代码中没有添加新JsTransformer的代码,不需要吗?
    • 我在bundletransformer.codeplex.com的«Javascript bundle obfuscation»讨论中写了详细的答案。
    猜你喜欢
    • 2017-09-19
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    相关资源
    最近更新 更多