175 votes

Node.js - obtenir le nom de fichier actuel

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

3 votes

1 votes

Je vois que personne n'a jamais trouvé de bonne réponse pour le nom de la fonction ou le numéro de ligne.

310voto

herve Points 1908

Node.js fournit une API standard pour le faire: Path.

Obtenir le nom du script actuel est alors facile:

var path = require('path');
var scriptName = path.basename(__filename);

0 votes

Ne s'agit-il pas du nom de base plutôt que du nom de fichier réel?

19 votes

Pour un script nommé script.js, vous obtiendrez script.js. Si vous voulez avoir seulement le nom sans extension, comme nous parlons ici d'un script js, vous pouvez utiliser var scriptName = path.basename(__filename, '.js'); ou var scriptName = path.basename(__filename, path.extname(__filename))

12 votes

Une autre façon de supprimer l'extension: path.parse(__filename).name

58voto

Anthony McCormick Points 645

Dans un module, vous pouvez faire l'une des choses 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 ou extension, vous pouvez faire quelque chose comme ceci.

module.filename.slice(__filename.lastIndexOf(path.sep)+1, module.filename.length -3);

4 votes

Vous voulez probablement utiliser path.sep pour le rendre compatible avec différentes plates-formes. Voici ce que j'ai fait __filename.slice(__filename.lastIndexOf(path.sep)+1);

2 votes

Pour ceux qui veulent simplement copier-coller ce super pratique one-liner, n'oubliez pas de soit var path = require('path'); au préalable ou de le changer en module.filename.slice(__filename.lastIndexOf(require('path')‌​.sep)+1, module.filename.length -3);

24 votes

Le -3 suppose une longueur d'extension, quelque chose comme ceci pourrait fonctionner mieux path.basename(module.filename, path.extname(module.filename))

54voto

Red Walrus Points 439

Pour obtenir uniquement le nom du fichier. Aucun module supplémentaire simplement :

// abc.js
console.log(__filename.slice(__dirname.length + 1));

 // abc
console.log(__filename.slice(__dirname.length + 1, -3));

1 votes

Voici ce pour quoi je suis venu. Merci!

1 votes

Cela devrait être la réponse acceptée. Fonctionne en mode strict. Très simple. Merci!

9 votes

Sauf si votre extension n'a pas 2 caractères de longueur, ce qui est totalement possible car vous pouvez lier l'interprétation de script à n'importe quelle extension de fichier que vous voulez... donc cela peut ne pas être une bonne solution générale.

27voto

ilyaipetrov Points 876
'use strict';

const scriptName = __filename.split(/[\\/]/).pop();

Explication

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 split avec une expression régulière comme premier paramètre.
L'expression régulière que nous voulons pour le séparateur est [\/] (séparé par / ou \), mais le symbole / doit être échappé pour le distinguer du terminateur de regex /, donc /[\\/]/.

const scriptName = __filename.split(/[\\/]/).pop(); // Retire le dernier élément du tableau
console.log(scriptName);
// 'yourScript.js'

Ne pas utiliser ceci

Vous devriez vraiment utiliser path.basename à la place (documenté pour la première fois dans Node.js v0.1.25), car cela gère tous les cas particuliers que vous ne voulez pas connaître comme les noms de fichiers avec des slashes à l'intérieur (par exemple, un fichier nommé "foo\bar" sur unix). Voir la réponse path ci-dessus ci-dessus.

0 votes

Veuillez ajouter une explication

1 votes

@DanielCheung Voici! Mais vraiment, tout cela est recherchable sur Internet, il suffit de rechercher javascript split et de commencer.

8 votes

Je vous aidais... -_- Votre réponse était en train d'être votée pour la suppression. Une réponse qui n'explique pas assez ou qui contient simplement du code sera supprimée.

3voto

heinob Points 2081

Vous pouvez également jeter un œil à console-plus. Cela ajoute le nom du fichier et le numéro de ligne à tout texte de journalisation et propose des couleurs différentes pour .log, .info et .error.

1 votes

Assez cool. Installez avec "npm install --save console-plus", ou si vous utilisez yarn : "yarn add console-plus"

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