4 votes

Chargement de fichiers sur un chemin relatif au fichier actuel dans Rhino

J'écris un programme JavaScript dans Rhino qui doit charger d'autres fichiers JavaScript. Cependant, la fonction intégrée load() La fonction charge les fichiers par rapport au répertoire actuel et je dois les charger relativement à la emplacement du script (pour que le programme puisse être appelé depuis n'importe quel répertoire).

Dans d'autres langues, j'utiliserais quelque chose comme dirname(__FILE__) + "/path/file" mais il semble que Rhino ne dispose pas d'un système de gestion de la qualité. __FILE__ ou quelque chose de similaire. J'ai essayé d'extraire le fichier actuel d'une exception lancée, mais il est vide, c'est-à-dire que le code suivant imprime "true" :

try {
  throw new Error();
} catch (e) {
  print(e.fileName === "");
}

J'ai essayé de regarder les sources de l'interpréteur et d'utiliser le pont Java-JavaScript, mais je n'ai encore rien trouvé d'utile (je vais probablement chercher davantage).

Quelqu'un a-t-il une astuce pour faire fonctionner le chargement de fichiers sur des chemins relatifs ?

3voto

BlkPengu Points 141

Le plus simple est sans doute de demander aux utilisateurs d'exécuter un script de lancement. Si vous êtes sur un *nix ou OS X, vous pourriez mettre un shell script dans le même répertoire que tout votre Javascript, qui change le répertoire en celui de votre script avant le lancement :

#!/bin/sh
cd `dirname "$0"`
java -jar js.jar your_script.js

Si votre script doit être exécuté dans le répertoire courant de l'utilisateur, vous pourriez plutôt demander au wrapper de passer son emplacement dans la ligne de commande :

#!/bin/sh
DIR=`basename "$0"`
java -jar "$DIR/js.jar" "$DIR/loader.js" "$DIR"

Ensuite, dans loader.js, utilisez la variable arguments intégrée de Rhino pour accéder à "$DIR" :

load(arguments[0] + "/another_js_file.js");

Les fonctions de Rhino sont documentées aquí .

Quelque chose de similaire est peut-être possible sous Windows ; je ne connais pas bien les fichiers batch CMD.EXE.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X