ScrpitUtils运行js脚本无法进行读取的require关键字
Closed this issue · 1 comments
版本情况
JDK版本: openjdk_17
hutool版本: 5.8.26(请确保最新尝试是否还有问题)
问题描述(包括截图)
使用ScrpitUtils进行执行js脚本,遇到要通过require进行导包,无法进行识别这个关键字.删除掉require导入,单独进行调用js中的函数,是可以进行调用。
-
复现代码
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
} -
堆栈信息
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
ScrpitUtil默认使用JDK自带的Nashorn
引擎,这个引擎只支持到ECMAScript 5.1
规范,require
是ES6
的语法,肯定不支持。
考虑使用其他引擎尝试。