Mevcut dosya adı, işlev adı ve satır numarası nasıl alınır?
Bunu günlüğe kaydetme / hata ayıklama amacıyla kullanmak istiyorum __FILE__, __LINE__ c ile eşdeğer
Mevcut dosya adı, işlev adı ve satır numarası nasıl alınır?
Bunu günlüğe kaydetme / hata ayıklama amacıyla kullanmak istiyorum __FILE__, __LINE__ c ile eşdeğer
Yanıtlar:
Node.js bunu yapmak için standart bir API sağlar: Yol .
Mevcut betiğin adını almak o zaman kolaydır:
var path = require('path');
var scriptName = path.basename(__filename);
script.jsalacaksınız script.js. İsmi yalnızca uzantısız almak jsistiyorsanız, burada bir senaryodan var scriptName = path.basename(__filename, '.js');var scriptName = path.basename(__filename, path.extname(__filename))
path.parse(__filename).name
__filenameES6 Modülünde tanımlanmamıştır.
CommonJSdeğişkenler ES modüllerinde mevcut değildir. Eşdeğerleri __filenameve __dirnameher dosyanın içinde import.meta.url.
bir modül içinde dosya adı ile tam yolu elde etmek için aşağıdakilerden herhangi birini yapabilirsiniz.
this.filename;
module.filename;
__filename;
Yolu veya uzantısı olmayan gerçek adı istiyorsanız, bunun gibi bir şey yapabilirsiniz.
module.filename.slice(__filename.lastIndexOf(path.sep)+1, module.filename.length -3);
var path = require('path');önceden ya da değiştirmeyi unutmayınmodule.filename.slice(__filename.lastIndexOf(require('path').sep)+1, module.filename.length -3);
path.basename(module.filename, path.extname(module.filename))
Yalnızca dosya adını almak için. Ek modül gerekmez:
// 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' ]
*
**/
Burada , ilk parametre olarak normal ifadeli split fonksiyonu kullanıyoruz .
Ayırıcı için istediğimiz normal ifade ( veya ile bölünür ), ancak onu normal ifade sonlandırıcısından ayırmak için sembolün öncelenmesi gerekir , bu nedenle . [\/]/\///[\\/]/
const scriptName = __filename.split(/[\\/]/).pop(); // Remove the last array element
console.log(scriptName);
// 'yourScript.js'
Bunun path.basenameyerine gerçekten kullanmalısınız (ilk olarak Node.js v0.1.25'te belgelenmiştir ), çünkü içinde eğik çizgi olan dosya adları gibi bilmek istemediğiniz tüm köşe durumlarını işler (örneğin, unix'te "foo \ bar" adlı dosya). Yukarıdakipath cevaba bakın .
javascript splitve başlayın.
Ayrıca console-plus'a da bakabilirsiniz . Bu, herhangi bir günlük metnine dosya adı ve keten numarası ekler ve .log, .info ve .error için farklı renklere sahiptir.
Biliyorum zaten uzun zaman oldu, ama yaptığım şey __filename.split('\\').pop(). Bu, dosya adıyla birlikte tam yolu alır, bölerek \dosya adınız olacak son dizini alır.
__filename.split('/').pop()
dosya adını almak için bu işlevi kullanabilirsiniz:
/**
* @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(/^.*[\\\/]/, '');
}
nodejs kullanıyorsanız, bu işlevi içeren paketi kurabilirsiniz https://www.npmjs.com/package/jotils