/// <summary>
        /// Constructs a instance of Uglify JS minifier
        /// </summary>
        /// <param name="createJsEngineInstance">Delegate that creates an instance of JS engine</param>
        /// <param name="uglifyConfig">Configuration settings of Uglify Minifier</param>
        public UglifyJsMinifier(Func <IJsEngine> createJsEngineInstance, UglifySettings uglifyConfig)
        {
            JsMinifierSettings     jsMinifierConfig     = uglifyConfig.Js;
            ParsingSettings        parsingConfig        = jsMinifierConfig.Parsing;
            CompressionSettings    compressionConfig    = jsMinifierConfig.Compression;
            ManglingSettings       manglingConfig       = jsMinifierConfig.Mangling;
            CodeGenerationSettings codeGenerationConfig = jsMinifierConfig.CodeGeneration;

            ParsingOptions = new ParsingOptions
            {
                BareReturns = parsingConfig.BareReturns,
                Strict      = parsingConfig.Strict
            };

            CompressionOptions = new CompressionOptions
            {
                Angular               = compressionConfig.Angular,
                Booleans              = compressionConfig.Booleans,
                Cascade               = compressionConfig.Cascade,
                CollapseVars          = compressionConfig.CollapseVars,
                Comparisons           = compressionConfig.Comparisons,
                Compress              = compressionConfig.Compress,
                Conditionals          = compressionConfig.Conditionals,
                DeadCode              = compressionConfig.DeadCode,
                DropConsole           = compressionConfig.DropConsole,
                DropDebugger          = compressionConfig.DropDebugger,
                Evaluate              = compressionConfig.Evaluate,
                GlobalDefinitions     = compressionConfig.GlobalDefinitions,
                HoistFunctions        = compressionConfig.HoistFunctions,
                HoistVars             = compressionConfig.HoistVars,
                IfReturn              = compressionConfig.IfReturn,
                JoinVars              = compressionConfig.JoinVars,
                KeepFunctionArgs      = compressionConfig.KeepFunctionArgs,
                KeepInfinity          = compressionConfig.KeepInfinity,
                Loops                 = compressionConfig.Loops,
                NegateIife            = compressionConfig.NegateIife,
                Passes                = compressionConfig.Passes,
                PropertiesDotNotation = compressionConfig.PropertiesDotNotation,
                PureGetters           = compressionConfig.PureGetters,
                PureFunctions         = compressionConfig.PureFunctions,
                ReduceVars            = compressionConfig.ReduceVars,
                Sequences             = compressionConfig.Sequences,
                TopLevel              = compressionConfig.TopLevel,
                TopRetain             = compressionConfig.TopRetain,
                Unsafe                = compressionConfig.Unsafe,
                UnsafeMath            = compressionConfig.UnsafeMath,
                UnsafeProto           = compressionConfig.UnsafeProto,
                UnsafeRegExp          = compressionConfig.UnsafeRegExp,
                Unused                = compressionConfig.Unused
            };

            ManglingOptions = new ManglingOptions
            {
                Eval     = manglingConfig.Eval,
                Except   = manglingConfig.Except,
                Mangle   = manglingConfig.Mangle,
                TopLevel = manglingConfig.TopLevel,
            };

            CodeGenerationOptions = new CodeGenerationOptions
            {
                AsciiOnly            = codeGenerationConfig.AsciiOnly,
                Beautify             = codeGenerationConfig.Beautify,
                Bracketize           = codeGenerationConfig.Bracketize,
                Comments             = codeGenerationConfig.Comments,
                IndentLevel          = codeGenerationConfig.IndentLevel,
                IndentStart          = codeGenerationConfig.IndentStart,
                InlineScript         = codeGenerationConfig.InlineScript,
                KeepQuotedProperties = codeGenerationConfig.KeepQuotedProperties,
                MaxLineLength        = codeGenerationConfig.MaxLineLength,
                PreserveLine         = codeGenerationConfig.PreserveLine,
                QuoteKeys            = codeGenerationConfig.QuoteKeys,
                QuoteStyle           = codeGenerationConfig.QuoteStyle,
                Semicolons           = codeGenerationConfig.Semicolons,
                SpaceColon           = codeGenerationConfig.SpaceColon,
                UnescapeRegexps      = codeGenerationConfig.UnescapeRegexps,
                Width    = codeGenerationConfig.Width,
                WrapIife = codeGenerationConfig.WrapIife
            };

            KeepFunctionNames = jsMinifierConfig.KeepFunctionNames;
            ScrewIe8          = jsMinifierConfig.ScrewIe8;
            Severity          = jsMinifierConfig.Severity;

            if (createJsEngineInstance == null)
            {
                string jsEngineName = uglifyConfig.JsEngine.Name;
                if (string.IsNullOrWhiteSpace(jsEngineName))
                {
                    throw new ConfigurationErrorsException(
                              string.Format(CoreStrings.Configuration_JsEngineNotSpecified,
                                            "uglify",
                                            @"
  * JavaScriptEngineSwitcher.Msie
  * JavaScriptEngineSwitcher.V8
  * JavaScriptEngineSwitcher.ChakraCore",
                                            "MsieJsEngine")
                              );
                }

                createJsEngineInstance = () => JsEngineSwitcher.Instance.CreateEngine(jsEngineName);
            }
            _createJsEngineInstance = createJsEngineInstance;
        }
        /// <summary>
        /// Constructs a instance of Uglify JS-minifier
        /// </summary>
        /// <param name="createJsEngineInstance">Delegate that creates an instance of JavaScript engine</param>
        /// <param name="uglifyConfig">Configuration settings of Uglify Minifier</param>
        public UglifyJsMinifier(Func<IJsEngine> createJsEngineInstance, UglifySettings uglifyConfig)
        {
            JsMinifierSettings jsMinifierConfig = uglifyConfig.Js;
            ParsingSettings parsingConfig = jsMinifierConfig.Parsing;
            CompressionSettings compressionConfig = jsMinifierConfig.Compression;
            ManglingSettings manglingConfig = jsMinifierConfig.Mangling;
            CodeGenerationSettings codeGenerationConfig = jsMinifierConfig.CodeGeneration;

            ParsingOptions = new ParsingOptions
            {
                Strict = parsingConfig.Strict,
                BareReturns = parsingConfig.BareReturns
            };

            CompressionOptions = new CompressionOptions
            {
                Compress = compressionConfig.Compress,
                Sequences = compressionConfig.Sequences,
                PropertiesDotNotation = compressionConfig.PropertiesDotNotation,
                DeadCode = compressionConfig.DeadCode,
                DropDebugger = compressionConfig.DropDebugger,
                Unsafe = compressionConfig.Unsafe,
                Conditionals = compressionConfig.Conditionals,
                Comparisons = compressionConfig.Comparisons,
                Evaluate = compressionConfig.Evaluate,
                Booleans = compressionConfig.Booleans,
                Loops = compressionConfig.Loops,
                Unused = compressionConfig.Unused,
                HoistFunctions = compressionConfig.HoistFunctions,
                KeepFunctionArgs = compressionConfig.KeepFunctionArgs,
                HoistVars = compressionConfig.HoistVars,
                IfReturn = compressionConfig.IfReturn,
                JoinVars = compressionConfig.JoinVars,
                Cascade = compressionConfig.Cascade,
                GlobalDefinitions = compressionConfig.GlobalDefinitions,
                PureGetters = compressionConfig.PureGetters,
                PureFunctions = compressionConfig.PureFunctions,
                DropConsole = compressionConfig.DropConsole,
                Angular = compressionConfig.Angular
            };

            ManglingOptions = new ManglingOptions
            {
                Mangle = manglingConfig.Mangle,
                Except = manglingConfig.Except,
                Eval = manglingConfig.Eval,
                Sort = manglingConfig.Sort,
                TopLevel = manglingConfig.TopLevel,
            };

            CodeGenerationOptions = new CodeGenerationOptions
            {
                Beautify = codeGenerationConfig.Beautify,
                IndentLevel = codeGenerationConfig.IndentLevel,
                IndentStart = codeGenerationConfig.IndentStart,
                QuoteKeys = codeGenerationConfig.QuoteKeys,
                SpaceColon = codeGenerationConfig.SpaceColon,
                AsciiOnly = codeGenerationConfig.AsciiOnly,
                InlineScript = codeGenerationConfig.InlineScript,
                Width = codeGenerationConfig.Width,
                MaxLineLength = codeGenerationConfig.MaxLineLength,
                Bracketize = codeGenerationConfig.Bracketize,
                Semicolons = codeGenerationConfig.Semicolons,
                Comments = codeGenerationConfig.Comments,
                PreserveLine = codeGenerationConfig.PreserveLine,
                UnescapeRegexps = codeGenerationConfig.UnescapeRegexps,
                QuoteStyle = codeGenerationConfig.QuoteStyle
            };

            ScrewIe8 = jsMinifierConfig.ScrewIe8;
            KeepFunctionNames = jsMinifierConfig.KeepFunctionNames;
            Severity = jsMinifierConfig.Severity;

            if (createJsEngineInstance == null)
            {
                string jsEngineName = uglifyConfig.JsEngine.Name;
                if (string.IsNullOrWhiteSpace(jsEngineName))
                {
                    throw new ConfigurationErrorsException(
                        string.Format(CoreStrings.Configuration_JsEngineNotSpecified,
                            "uglify",
                            @"
              * JavaScriptEngineSwitcher.Msie
              * JavaScriptEngineSwitcher.V8",
                            "MsieJsEngine")
                    );
                }

                createJsEngineInstance = (() =>
                    JsEngineSwitcher.Current.CreateJsEngineInstance(jsEngineName));
            }
            _createJsEngineInstance = createJsEngineInstance;
        }
Пример #3
0
        public static void RegisterBundles(BundleCollection bundles)
        {
            // bundles.IgnoreList.Clear();
            //  AddDefaultIgnorePatterns(bundles.IgnoreList);
            //NOTE: it's bundles.DirectoryFilter in Microsoft.AspNet.Web.Optimization.1.1.3 and not bundles.IgnoreList

            var engine = new V8JsEngine();

            var uglySettings = new UglifySettings();

            uglySettings.Js.CodeGeneration.Beautify = true;

            bundles.UseCdn = false;

            var uglifyJsMinifier = new UglifyJsMinifier(() => engine, uglySettings)

            {
                CompressionOptions = { Angular = true },
                ParsingOptions     = new ParsingOptions {
                    Strict = true
                },
                CodeGenerationOptions = new CodeGenerationOptions()
            };


            var lessTranslator = new LessTranslator();

            var cssTransformer = new CssTransformer(new CleanCssMinifier(), new ITranslator[] { lessTranslator });

            var tsTranslater = new TypeScriptTranslator();

            var jsTransformer = new JsTransformer(uglifyJsMinifier, new List <ITranslator> {
                tsTranslater
            });

            var jsBundle = new CustomScriptBundle("~/bundles/js");

            jsBundle.IncludeDirectory("~/scripts", "*.js", true);
            jsBundle.IncludeDirectory("~/scripts", "*.map", true);

            bundles.IgnoreList.Ignore("angular-mocks.js");
            bundles.IgnoreList.Ignore("angular-scenario.js");

            //   jsBundle.IncludeDirectory("~/scripts/angular-dialog-service-5.1.2", "*.js", true);

            jsBundle.Builder = new DefaultBundleBuilder();

            jsBundle.Orderer = new JsBundlerOrderer();

            jsBundle.Transforms.Add(jsTransformer);

            bundles.Add(jsBundle);


            var typeScriptBundle = new CustomScriptBundle("~/bundles/ts");    //// Typescript generatred locally via visual studio and checked in - not done on the fly

            typeScriptBundle.IncludeDirectory("~/app", "*.js", true);

            typeScriptBundle.Transforms.Add(jsTransformer);

            typeScriptBundle.Builder = new DefaultBundleBuilder();

            typeScriptBundle.Orderer = new JsBundlerOrderer();

            bundles.Add(typeScriptBundle);


            var lessCssBundle = new Bundle("~/bundles/less");

            lessCssBundle.Include("~/Content/bootstrap/bootstrap.less");

            lessCssBundle.Builder = new DefaultBundleBuilder();

            lessCssBundle.Transforms.Add(cssTransformer);

            lessCssBundle.Orderer = new DefaultBundleOrderer();

            bundles.Add(lessCssBundle);

            var cssBundle = new StyleBundle("~/bundles/css");

            cssBundle.IncludeDirectory("~/Content/Bootstrap", "*.css", false);
            cssBundle.IncludeDirectory("~/Content/", "*.css", false);
            cssBundle.IncludeDirectory("~/Content/css", "*.css", false);

            cssBundle.Builder = new DefaultBundleBuilder();

            cssBundle.Transforms.Add(cssTransformer);

            cssBundle.Orderer = new PushToTopOrderer("bootstrap");

            bundles.Add(cssBundle);

            var publicCssBundle = new StyleBundle("~/bundles/public/css");

            publicCssBundle.IncludeDirectory("~/Content/public", "*.css", true);
            publicCssBundle.Builder = new DefaultBundleBuilder();
            publicCssBundle.Transforms.Add(cssTransformer);
            publicCssBundle.Orderer = new PushToTopOrderer("bootstrap");
            bundles.Add(publicCssBundle);
        }