Est-il possible d'obtenir le nom de fichier du module JavaScript actuel?
// item.mjs function printName() { console.log(...); // >> item or item.mjs };
Si non, pourquoi pas? Sandboxing, etc.
3 Réponses :
Une solution potentielle: chaque méthode du fichier mjs peut définir une variable globale qui sera le nom du module. La méthode printName ()
afficherait alors la valeur actuelle de cette variable globale. De cette façon, pendant le traitement, vous pouvez inspecter l'état actuel de cette variable globale pour le nom du fichier en cours d'exécution.
global js
const funstuff_js_name = 'FunStuff.mjs'; function doFunStuff() { global_js_name = funstuff_js_name; // update the global variable for the module return haveFun(); }
à l'intérieur de item.mjs:
const item_js_name = 'item.mjs'; function doWork(data) { global_mjs_name = item_js_name; // every time you execute code within the module, update the global variable return processData(data); }
à l'intérieur d'un autre module appelé FunStuff.mjs p>
var global_mjs_name = 'none'; function printName() { console.log('processed in ' + global_mjs_name); } window.addEventListener('DOMContentLoaded', function(event){ printName(); // output -> 'none' doWork({}); printName(); // output -> 'item.mjs' doFunStuff(); printName(); // output -> 'FunStuff.mjs' });
Je ne dis pas que c'est la meilleure façon d'accomplir cette tâche. La gestion manuelle du changement de la variable globale peut être pénible.
Vous pouvez obtenir le fichier
// `/path/to/file1.js` var path = require('path'); console.log( path.basename(__filename) // `file1.js` ); Lastly, you can get the name of
Vous recherchez le ( proposé ) import.meta
propriété meta. Ce que contient exactement cet objet dépend de l'environnement, mais dans un navigateur, vous pouvez utiliser
console.log(new URL(import.meta.url).pathname.split("/").pop())
Vous pouvez extraire le nom du fichier en l'analysant avec le développeur URL
interface , par exemple
// item.mjs function printName() { console.log(import.meta.url); // https://domain.example/js/item.mjs }
Dans Node.js, il s'agit simplement de
__filename__
. Si vous recherchez une solution côté client, consultez cette réponse .@PatrickRoberts Merci mais je ne parle pas des fichiers Node.js.
Parlez-vous de fichiers chargés avec des balises de script ou vous utilisez un framework js, où vous avez besoin d'un nom de fichier?
@MahendraPratap Je parle de modules JavaScript importés avec une balise de script (c'est-à-dire
).
Vous pouvez obtenir des scripts par document.getElementsByTagName ('script'), puis vérifier src pour obtenir le nom, mais obtenir le nom du module actuel ne serait pas possible je pense.
Avez-vous la possibilité de modifier les modules ou sont-ils hors de votre contrôle?
@daddygames Je peux modifier les modules.
Modules @isar Clientside ES6 sans étape de transpilation? Alors vous êtes sûrement aussi assez courageux pour utiliser cette fonctionnalité expérimentale :-)