3
votes

Obtenez le nom de fichier du module ES actuel

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.


8 commentaires

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 :-)


3 Réponses :


0
votes

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.


0 commentaires

-1
votes

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 


0 commentaires

3
votes

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
}


0 commentaires