Обфускация Javascript и Bundletransformer
Я пытался запутать вывод наших пакетов JavaScript на лету и наткнулся на пакетный преобразователь (расширение пакета, использующее YUI Compressor), но безуспешно реализовал его! Пока, читая предоставленную документацию, я написал следующий код в методе 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>
Судя по выходным данным, я могу сделать вывод, что сжатие не только не запутано, но и вообще не действует! Я не смог найти образцы в Интернете и попытался изменить некоторые настройки здесь и там без удачи! Так что я довольно невежественен, и любые решения или предложения будут высоко оценены. Заранее спасибо!
1 ответ
Bahador,
На самом деле нам нужен только очень простой код:
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.config
файл:
<configuration>
…
<system.web>
<compilation debug="false" … />
…
</system.web>
…
</configuration>
Или добавить в App_Start\BundleConfig.cs
подайте следующий код:
BundleTable.EnableOptimizations = true;
Прежде чем читать документацию по Bundle Transformer, я рекомендую прочитать главу "Связывание и минимизация " учебного руководства по ASP.NET MVC 4.