web-dev-qa-db-fra.com

Java, nashorn accédant à un autre fichier js

Est-il possible d'inclure un js d'un autre avec le moteur Java Nashorn?

ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn");
InputStreamReader rs = new InputStreamReader(new FileInputStream(new File(.../script.js));
engine.eval(rs);

script.js

var System = Java.type('Java.lang.System');
// document.write("./test.js"); - javax.script.ScriptException: ReferenceError: "document" is not defined 
// require('./test.js'); - require is not defined

test.js

System.out.println("reading test.js file");

je veux créer un script de niveau supérieur (dans cet exemple, son script.js) et l'utiliser comme bibliothèque pour d'autres scripts dans le même répertoire.

12
hnnn

vous pouvez utiliser la fonction load() de Nashorn

https://wiki.openjdk.Java.net/display/Nashorn/Nashorn+extensions

// can load script from files, URLs

load("foo.js"); // loads script from file "foo.js" from current directory
load("http://www.example.com/t.js"); // loads script file from given URL

// loads script from an object's properties. 

// Object should have "script" and "name" properties.
//     "script" property contains string code of the script. 
//     "name" property specifies name to be used while reporting errors from script
// This is almost like the standard "eval" except that it associates a name with
// the script string for debugging purpose.

load({ script: "print('hello')", name: "myscript.js"})

// load can also load from pseudo URLs like "nashorn:", "fx:". "nashorn:" pseudo URL scheme
// for nashorn's built-in scripts. "fx:" pseudo URL scheme for JavaFX support scripts

// load nashorn's parser support script - defines 'parse'
// function in global scope

load("nashorn:parser.js"); 

// load Mozilla compatibility script - which defines global functions
// like importPackage, importClass for rhino compatibility.

load("nashorn:mozilla_compat.js");
19
Vik Gamov

Nashorn est brillant.

Et il vient avec la méthode charge intégrée !!!

charge peut prendre une URL afin que vous puissiez exploiter d'excellentes bibliothèques JavaScript sur le CDNJS

si vous utilisez Nudge4j vous pouvez obtenir le minificateur html de kangax fonctionne exactement comme ceci: 

load('https://cdnjs.cloudflare.com/ajax/libs/html-minifier/3.3.3/htmlminifier.js')
minify = require('html-minifier').minify;
input = '<div> <p>    foo </p>    </div>';
output = minify(input, { collapseWhitespace: true });
0
Zo72