2017-03-22 2 views
0

Ich kann nicht mit Google Closure Compiler einen einfachen Javascript-Code mit let Stichwort kompilieren.Schließung Compiler es6 lassen Stichwort

Meine Javascript-Datei example.js:

function display() { 
    let a = 'hello'; 
    console.log(a, 'world'); 
} 
display(); 

Mein JAVA-Code, dies zu kompilieren ist:

package compiler; 

import static com.google.javascript.jscomp.SourceFile.fromCode; 
import static com.google.javascript.jscomp.SourceFile.fromInputStream; 
import static java.nio.charset.Charset.defaultCharset; 

import java.io.IOException; 
import java.io.InputStream; 
import java.net.URI; 
import java.net.URISyntaxException; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 
import java.util.stream.Collectors; 

import com.google.javascript.jscomp.CompilationLevel; 
import com.google.javascript.jscomp.Compiler; 
import com.google.javascript.jscomp.CompilerOptions; 
import com.google.javascript.jscomp.CompilerOptions.LanguageMode; 
import com.google.javascript.jscomp.JSError; 
import com.google.javascript.jscomp.Result; 
import com.google.javascript.jscomp.SourceFile; 

public class CompilerMain { 

    public static void main(String[] args) throws URISyntaxException, IOException { 

     final String script = readScript(); 

     final Compiler compiler = new Compiler(); 
     final CompilerOptions options = new CompilerOptions(); 
//  CompilationLevel.SIMPLE_OPTIMIZATIONS.setOptionsForCompilationLevel(options); 
     CompilationLevel.ADVANCED_OPTIMIZATIONS.setOptionsForCompilationLevel(options); 
     options.setContinueAfterErrors(true); 
     options.setLanguageIn(LanguageMode.ECMASCRIPT6); 
     options.setLanguageOut(LanguageMode.ECMASCRIPT5); 
     options.setExternExports(true); 

     System.out.println("Compiling:\n" + script); 
     System.out.println("------------------------------"); 

     final List<SourceFile> externs = new ArrayList<>(); 
     externs.add(externSourceFileES6("base.js")); 
     externs.add(externSourceFileES6("es6_runtime.js")); 
//  externs.add(externSourceFileES6("runtime_type_check.js")); 

     final List<SourceFile> inputs = new ArrayList<>(); 
     final SourceFile src = fromCode("stdin.txt", script); 
     inputs.add(src); 
     final Result result = compiler.compile(externs, inputs, options); 

     System.out.println("------------------------------"); 

     final JSError[] errors = result.errors; 
     if (errors.length > 0) { 
      for (JSError error : errors) { 
       System.err.println(error.toString()); 
      } 
     } else { 
      System.out.println(compiler.toSource()); 
     } 

    } 

    private static SourceFile externSourceFileES6(final String filename) throws IOException { 

     final InputStream inputstream = CompilerMain.class 
       .getResourceAsStream("/com/google/javascript/jscomp/js/" + filename); 

     return fromInputStream(filename, inputstream, defaultCharset()); 
    } 

    private static String readScript() throws URISyntaxException, IOException { 
     final URI uri = CompilerMain.class.getResource("/compiler/example1.js").toURI(); 
     final Path path = Paths.get(uri); 
     return Files.readAllLines(path).stream().collect(Collectors.joining("\n")); 
    } 

} 

Die Ausgabe lautet:

Compiling: 
function display() { 
    let a = 'hello'; 
    console.log(a, 'world'); 
} 
display(); 
------------------------------ 
mars 22, 2017 4:48:02 PM com.google.javascript.jscomp.LoggerErrorManager println 
GRAVE: ERROR - Missing externs definition for Symbol. Did you forget to include the ES6 externs? 

mars 22, 2017 4:48:02 PM com.google.javascript.jscomp.LoggerErrorManager printSummary 
AVERTISSEMENT: 1 error(s), 0 warning(s), 75.0% typed 
------------------------------ 
JSC_MISSING_ES6_EXTERNS. Missing externs definition for Symbol. Did you forget to include the ES6 externs? at (unknown source) line (unknown line) : (unknown column) 

Maven Abhängigkeit kann Ihnen helfen:

<dependency> 
     <groupId>com.google.javascript</groupId> 
     <artifactId>closure-compiler</artifactId> 
     <version>v20170124</version> 
    </dependency> 

Bitte geben

+0

Ich bin überhaupt kein Java-Entwickler, aber würde das helfen? 'import com.google.javascript.jscomp. *;' –

+0

Ich schätze Ihre Bemühungen, aber es löst nichts. Grüße – Corentin

+0

Stab im Dunkeln, aber sollten Sie "es6.js" anstelle von "es6_runtime.js" hinzufügen? –

Antwort

3

Sie benötigen ein geeignetes Externen durch den Aufruf getBuiltinExterns gesetzt hinzuzufügen. Der Compiler benötigt die Sprache externs.

+0

** Danke ** Tschad, das funktioniert! – Corentin

+0

Ich habe Zeilen wie folgt hinzugefügt: 'final Environment env = options.getEnvironment(); \t \t endgültige Liste externs = AbstractCommandLineRunner.getBuiltinExterns (env); ' – Corentin

Verwandte Themen