【问题标题】:Execution uglifyJs2 via Nashorn通过 Nashorn 执行 uglifyJs2
【发布时间】:2016-03-09 13:27:43
【问题描述】:

我通过uglifyjs --self 提取了 uglifyJs2,并尝试使用 uglify.js 缩小 app.js。我希望,至少应该将缩小的 js 生成到新文件或控制台中,但现在它不起作用。使用 uglify.min.js 缩小 app.js 应该怎么做?

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

我的时候

【问题讨论】:

    标签: java nashorn


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      作为替代方案...

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

      在我的系统上调用 uglify.callMember(...) 的 100,000 次调用中,它看起来确实慢了一点,它慢了大约 150 毫秒。首先调用 uglify.getMember("parse") 并直接在该对象上使用 call 似乎没有任何改进。

      但它确实避免了命名冲突

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-14
        • 2017-07-20
        • 1970-01-01
        • 2016-07-04
        • 1970-01-01
        • 2014-01-14
        • 2011-04-21
        • 2017-09-09
        相关资源
        最近更新 更多