dromara/hutool

ScrpitUtils运行js脚本无法进行读取的require关键字

Closed this issue · 1 comments

版本情况

JDK版本: openjdk_17
hutool版本: 5.8.26(请确保最新尝试是否还有问题)

问题描述(包括截图)

使用ScrpitUtils进行执行js脚本,遇到要通过require进行导包,无法进行识别这个关键字.删除掉require导入,单独进行调用js中的函数,是可以进行调用。
image

  1. 复现代码
    public static void main(String[] args) throws ScriptException {
    Object add = ScriptUtil.invoke(new FileReader("./wyy.js").readString(), "test", 1);
    System.out.println(add);

    }
    前端
    要进行调用的js
    var CryptoJS=require("crypto-js")
    // 进行加密请求参数的方法
    function test(a){
    return a
    }

  2. 堆栈信息
    Exception in thread "main" cn.hutool.script.ScriptRuntimeException: javax.script.ScriptException: :1:0 Expected an operand but found const
    const CryptoJS=require("crypto-js")
    ^ in at line number 1 at column number 0 in at line number 1 at column number 0
    at cn.hutool.script.ScriptUtil.evalInvocable(ScriptUtil.java:172)
    at cn.hutool.script.ScriptUtil.invoke(ScriptUtil.java:242)
    at com.fs.utils.Test.main(Test.java:13)
    Caused by: javax.script.ScriptException: :1:0 Expected an operand but found const
    const CryptoJS=require("crypto-js")
    ^ in at line number 1 at column number 0
    at org.openjdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:463)
    at org.openjdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:530)
    at org.openjdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:517)
    at org.openjdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:395)
    at org.openjdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:151)
    at java.scripting/javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:262)
    at cn.hutool.script.ScriptUtil.evalInvocable(ScriptUtil.java:170)
    ... 2 more
    Caused by: org.openjdk.nashorn.internal.runtime.ParserException: :1:0 Expected an operand but found const
    const CryptoJS=require("crypto-js")
    ^
    at org.openjdk.nashorn.internal.parser.AbstractParser.error(AbstractParser.java:293)
    at org.openjdk.nashorn.internal.parser.AbstractParser.error(AbstractParser.java:278)
    at org.openjdk.nashorn.internal.parser.Parser.unaryExpression(Parser.java:4418)
    at org.openjdk.nashorn.internal.parser.Parser.expression(Parser.java:4568)
    at org.openjdk.nashorn.internal.parser.Parser.conditionalExpression(Parser.java:4720)
    at org.openjdk.nashorn.internal.parser.Parser.assignmentExpression(Parser.java:4659)
    at org.openjdk.nashorn.internal.parser.Parser.expression(Parser.java:4537)
    at org.openjdk.nashorn.internal.parser.Parser.expressionStatement(Parser.java:1840)
    at org.openjdk.nashorn.internal.parser.Parser.statement(Parser.java:1146)
    at org.openjdk.nashorn.internal.parser.Parser.sourceElements(Parser.java:900)
    at org.openjdk.nashorn.internal.parser.Parser.program(Parser.java:835)
    at org.openjdk.nashorn.internal.parser.Parser.parse(Parser.java:322)
    at org.openjdk.nashorn.internal.parser.Parser.parse(Parser.java:282)
    at org.openjdk.nashorn.internal.runtime.Context.compile(Context.java:1484)
    at org.openjdk.nashorn.internal.runtime.Context.compileScript(Context.java:1451)
    at org.openjdk.nashorn.internal.runtime.Context.compileScript(Context.java:761)
    at org.openjdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:528)
    ... 7 more

  3. 测试涉及到的文件(注意脱密)
    屏幕截图 2024-05-01 203526

looly commented

ScrpitUtil默认使用JDK自带的Nashorn引擎,这个引擎只支持到ECMAScript 5.1规范,requireES6的语法,肯定不支持。

考虑使用其他引擎尝试。