Node.js - geçerli dosya adını alma


Yanıtlar:


231

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

Bu, gerçek dosya adı yerine temel adını almıyor mu?
Phil

10
adlı bir komut dosyası için 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))
bahsettiğimiz

6
uzantıyı düşürmenin başka bir yolu:path.parse(__filename).name
RH Becker

__filenameES6 Modülünde tanımlanmamıştır.
Cullub

1
@Cullub, nodejs belgelerinden ayıklayın : Bu CommonJSdeğişkenler ES modüllerinde mevcut değildir. Eşdeğerleri __filenameve __dirnameher dosyanın içinde import.meta.url.
Herve

47

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

4
Muhtemelen platformlar arası yapmak için path.sep'i kullanmak istersiniz. İşte yaptığım __filename.slice (__ dosyaadı.lastIndexOf (yol.sep) +1);
Ryan

2
Bu süper kullanışlı tek astarı kopyalayıp yapıştırmak isteyenler için var path = require('path');önceden ya da değiştirmeyi unutmayınmodule.filename.slice(__filename.lastIndexOf(require('path').sep)+1, module.filename.length -3);
forrestranger

17
-3 bir uzatma süresi varsayar, bunun gibi bir şey daha iyi çalışabilirpath.basename(module.filename, path.extname(module.filename))
dre

32

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

Buraya bunun için geldim. Teşekkürler!
leviathanbadger

1
Kabul edilen cevap bu olmalıdır. Katı modda çalışır. Çok basit. Teşekkür ederim!
Matthew

3
Uzantınız 2 karakter uzunluğunda olmadığı sürece, bu tamamen mümkündür çünkü komut dosyası yorumlamasını istediğiniz herhangi bir dosya uzantısına bağlayabilirsiniz ... bu nedenle bu, her yönüyle iyi bir çözüm olmayabilir.
ErikE

24
'use strict';

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

açıklama

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'

Bunu Kullanma

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 .


Lütfen açıklama ekleyin
Daniel Cheung

@DanielCheung İşte buradasınız! Ama gerçekte tüm bunlar İnternet'te aranabilir, sadece google javascript splitve başlayın.
ilyaigpetrov

3
Sana yardım ediyordum ... -_- Cevabınız silinmek üzere oylanıyordu. Bir cevap yeterince açıklayan değil ya da sadece içeren kod olacak silinir.
Daniel Cheung

3

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.


Oldukça havalı. "Npm install --save console-plus" ile yükleyin veya iplik kullanıyorsanız: "iplik ekle konsol-artı"
Andrew Faulkner

1

Dosya adını kaydedici etiketi olarak kullanmak istedim, bu yüzden en yalın ve istediğim şey şuydu:

__filename.substring(__dirname.length + 1, __filename.lastIndexOf("."))

1

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.


1
MacOS'ta__filename.split('/').pop()
Reece Daniels

1

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.