2016-03-09 4 views
2

Я извлек uglifyJs2 через uglifyjs --self, и я пытаюсь минимизировать app.js с помощью uglify.js. Я ожидаю, что minified js должен быть сгенерирован в новый файл или консоль, по крайней мере, но теперь он не работает. Что делать, чтобы минимизировать app.js с помощью uglify.min.js?Выполнение uglifyJs2 через Nashorn

public static void main(String[] args) throws Exception { 
    ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("nashorn"); 
    Bindings bindings = new SimpleBindings(); 
    bindings.put("console", System.console()); 
    executeJs("uglifyjs.min.js",scriptEngine, bindings); 
    String res = (String) invocable.invokeFunction("UglifyJS.parse(code)", code); 
    //Here I got NoSuchMethodException: No such function UglifyJS.parse(code) 
} 

static String readFile(String path, Charset encoding) 
     throws IOException 
{ 
    byte[] encoded = Files.readAllBytes(Paths.get(path)); 
    return new String(encoded, encoding); 
} 

private static void executeJs(String fileName, ScriptEngine engine, Bindings bindings) throws Exception { 
    String test = readFile(fileName, StandardCharsets.UTF_8); 
    engine.put(ScriptEngine.FILENAME, fileName); 
    engine.eval(test, bindings); 
} 

Когда я мо

ответ

2

invokeFunction может использоваться для вызова только глобальные функции. Он не может использоваться для оценки произвольного кода, как вы уже выше. Далее будет работать:

// define a global function that accepts one arg and invoke UglifyJS.parse on it 
scriptEngine.eval("function func(code) { return UglifyJS.parse(code) }"); 

// call the newly defined global function "func" 
invocable.invokeFunction("func", code); 
0

В качестве альтернативы ...

ScriptObjectMirror uglify = (ScriptObjectMirror)this.scriptEngine.eval("UglifyJS"); 
    String ugly = (String)uglify.callMember("parse", "mycode"); 

Это действительно кажется, чуть-чуть медленнее 100000 вызовов uglify.callMember (...) в моей системе его о 150MS помедленнее. Похоже, что это не улучшилось, сначала вызвав uglify.getMember («разбор») и используя вызов непосредственно на этом объекте.

Однако он избегает конфликта имен

Смежные вопросы