Closure Compiler options

后端 未结 1 387
旧时难觅i
旧时难觅i 2020-12-20 01:29

I want to use Closure Compiler to minify/compress JS code.

the problem is that it doesn\'t minify as well as I expect it to. consider the code below. when I pass t

相关标签:
1条回答
  • 2020-12-20 01:59

    You are using setDebugOptionsForCompilationLevel(), you want setOptionsForCompilationLevel(). From the Source this is what setDebugOptionsForCompilationLevel is doing:

    public void setDebugOptionsForCompilationLevel(CompilerOptions options) {
        options.anonymousFunctionNaming = AnonymousFunctionNamingPolicy.UNMAPPED;
        options.generatePseudoNames = true;
        options.removeClosureAsserts = false;
        // Don't shadow variables as it is too confusing.
        options.shadowVariables = false;
    }
    

    While this is what setOptionsForCompilationLevel() is doing:

    // All the safe optimizations.
    options.dependencyOptions.setDependencySorting(true);
    options.closurePass = true;
    options.foldConstants = true;
    options.coalesceVariableNames = true;
    options.deadAssignmentElimination = true;
    options.extractPrototypeMemberDeclarations = true;
    options.collapseVariableDeclarations = true;
    options.convertToDottedProperties = true;
    options.rewriteFunctionExpressions = true;
    options.labelRenaming = true;
    options.removeDeadCode = true;
    options.optimizeArgumentsArray = true;
    options.collapseObjectLiterals = true;
    options.protectHiddenSideEffects = true;
    
    // All the advance optimizations.
    options.removeClosureAsserts = true;
    options.aliasKeywords = true;
    options.reserveRawExports = true;
    options.setRenamingPolicy(
        VariableRenamingPolicy.ALL, PropertyRenamingPolicy.ALL_UNQUOTED);
    options.shadowVariables = true;
    options.removeUnusedPrototypeProperties = true;
    options.removeUnusedPrototypePropertiesInExterns = true;
    options.collapseAnonymousFunctions = true;
    options.collapseProperties = true;
    options.checkGlobalThisLevel = CheckLevel.WARNING;
    options.rewriteFunctionExpressions = true;
    options.smartNameRemoval = true;
    options.inlineConstantVars = true;
    options.setInlineFunctions(Reach.ALL);
    options.inlineGetters = true;
    options.setInlineVariables(Reach.ALL);
    options.flowSensitiveInlineVariables = true;
    options.computeFunctionSideEffects = true;
    
    // Remove unused vars also removes unused functions.
    options.setRemoveUnusedVariables(Reach.ALL);
    
    // Move code around based on the defined modules.
    options.crossModuleCodeMotion = true;
    options.crossModuleMethodMotion = true;
    
    // Call optimizations
    options.devirtualizePrototypeMethods = true;
    options.optimizeParameters = true;
    options.optimizeReturns = true;
    options.optimizeCalls = true;
    

    Technically, SIMPLE_OPTIMIZATIONS would give you argument renaming., in case advanced start causing problems with your code (again from the source):

    /**
     * SIMPLE_OPTIMIZATIONS performs transformations to the input JS that do not
     * require any changes to JS that depend on the input JS. For example,
     * function arguments are renamed (which should not matter to code that
     * depends on the input JS), but functions themselves are not renamed (which
     * would otherwise require external code to change to use the renamed function
     * names).
     */
    
    0 讨论(0)
提交回复
热议问题