Opzioni del compilatore di chiusura

Voglio usare Closure Compiler per minimizzare / comprimere il codice JS.

il problema è che non minimizza come mi aspetto che faccia. considera il codice qui sotto. quando passo la corda

var func = function ( someArgument ) { alert ( someArgument ); return someArgument; } 

Mi aspetto che il codice miniato rinomini “someArgument” a qualcosa di molto più breve, come “a”.

è così com’è o sto facendo qualcosa di sbagliato? TIA

 public static void Compress( String src ) { ByteArrayOutputStream err = new ByteArrayOutputStream(); CompilerOptions opt = new CompilerOptions(); CompilationLevel.ADVANCED_OPTIMIZATIONS.setDebugOptionsForCompilationLevel( opt ); Compiler.setLoggingLevel( Level.OFF ); Compiler compiler = new Compiler( new PrintStream( err ) ); compiler.disableThreads(); List externs = Collections.emptyList(); List inputs = Arrays.asList( SourceFile.fromCode( "javascript-code.js", src) ); Result result = compiler.compile( externs, inputs, opt ); System.out.println( "source: " + compiler.toSource() ); } 

    Stai usando setDebugOptionsForCompilationLevel() , vuoi setOptionsForCompilationLevel() . Da Source questo è ciò che setDebugOptionsForCompilationLevel sta facendo:

     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; } 

    Mentre questo è ciò che setOptionsForCompilationLevel() sta facendo:

     // 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; 

    Tecnicamente, SIMPLE_OPTIMIZATIONS ti darebbe la ridenominazione dell’argomento., Nel caso in cui l’avvio avanzato causi problemi con il tuo codice (sempre dalla sorgente):

     /** * 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). */