Comment obtenir le nom du fichier actuel, le nom de la fonction et le numéro de ligne?
Je veux l'utiliser à des fins de journalisation / débogage, équivalent à __FILE__, __LINE__ en c
Comment obtenir le nom du fichier actuel, le nom de la fonction et le numéro de ligne?
Je veux l'utiliser à des fins de journalisation / débogage, équivalent à __FILE__, __LINE__ en c
Réponses:
Node.js fournit une API standard pour ce faire: Path .
Obtenir le nom du script courant est alors facile:
var path = require('path');
var scriptName = path.basename(__filename);
script.js, vous obtiendrez script.js. Si vous voulez avoir le nom uniquement sans extension, comme nous parlons ici d'un jsscript, vous pouvez utiliser var scriptName = path.basename(__filename, '.js');ouvar scriptName = path.basename(__filename, path.extname(__filename))
path.parse(__filename).name
__filenamen'est pas défini dans un module ES6.
CommonJSvariables ne sont pas disponibles dans les modules ES. Des équivalents de __filenameet __dirnamepeuvent être créés à l'intérieur de chaque fichier via import.meta.url.
dans un module, vous pouvez effectuer l'une des opérations suivantes pour obtenir le chemin complet avec le nom de fichier
this.filename;
module.filename;
__filename;
Si vous voulez juste le nom réel sans chemin ni extension, vous pouvez faire quelque chose comme ça.
module.filename.slice(__filename.lastIndexOf(path.sep)+1, module.filename.length -3);
var path = require('path');changer à l' avance ou de le changer enmodule.filename.slice(__filename.lastIndexOf(require('path').sep)+1, module.filename.length -3);
path.basename(module.filename, path.extname(module.filename))
Pour obtenir uniquement le nom du fichier. Pas de module supplémentaire simplement:
// abc.js
console.log(__filename.slice(__dirname.length + 1));
// abc
console.log(__filename.slice(__dirname.length + 1, -3));
'use strict';
const scriptName = __filename.split(/[\\/]/).pop();
console.log(__filename);
// 'F:\__Storage__\Workspace\StackOverflow\yourScript.js'
const parts = __filename.split(/[\\/]/);
console.log(parts);
/*
* [ 'F:',
* '__Storage__',
* 'Workspace',
* 'StackOverflow',
* 'yourScript.js' ]
*
**/
Ici, nous utilisons la fonction de fractionnement avec une expression régulière comme premier paramètre.
L'expression régulière que nous voulons pour séparateur est [\/](divisée par /ou \) mais le /symbole doit être échappé pour le distinguer du terminateur d' expression régulière /, donc /[\\/]/.
const scriptName = __filename.split(/[\\/]/).pop(); // Remove the last array element
console.log(scriptName);
// 'yourScript.js'
Vous devriez vraiment utiliser à la path.basenameplace ( documenté pour la première fois dans Node.js v0.1.25 ), car il gère tous les cas d'angle que vous ne voulez pas connaître comme les noms de fichiers avec des barres obliques à l'intérieur (par exemple le fichier nommé "foo \ bar" sous unix). Voir la pathréponse ci-dessus .
javascript splitet de commencer.
Vous pouvez également regarder console-plus . Cela ajoute un nom de fichier et un numéro de lin à tout texte de journalisation et a des couleurs différentes pour .log, .info et .error.
Je sais que ça fait déjà longtemps, mais ce que j'ai fait l'est __filename.split('\\').pop(). Cela obtiendra le chemin complet avec le nom du fichier, le divisera \puis le dernier index qui sera votre nom de fichier.
__filename.split('/').pop()
vous pouvez utiliser cette fonction pour obtenir le nom du fichier:
/**
* @description
* get file name from path
* @param {string} path path to get file name
* @returns {string} file name
* @example
* getFileName('getFileName/index.js') // => index.js
*/
export default function getFileName(path) {
return path.replace(/^.*[\\\/]/, '');
}
si vous utilisez nodejs, vous pouvez installer le package qui inclut cette fonction https://www.npmjs.com/package/jotils