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.