Node.js - отримання поточного імені файлу


Відповіді:


230

Node.js надає стандартний API для цього: Шлях .

Отримати ім’я поточного сценарію тоді просто:

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

Це не отримує базове ім'я, а не власне ім'я файлу?
— Філ

10
для сценарію з іменем script.jsви отримаєте script.js. Якщо ви хочете мати ім'я лише без розширення, як ми говоримо тут про jsсценарій, який ви можете використовувати, var scriptName = path.basename(__filename, '.js');абоvar scriptName = path.basename(__filename, path.extname(__filename))
— herve

6
ще один спосіб скинути розширення:path.parse(__filename).name
— RH Becker

__filenameне визначено в модулі ES6.
— Cullub

1
@Cullub, витяг з документації на nodejs : Ці CommonJSзмінні недоступні в модулях ES. Еквіваленти __filenameта __dirnameможна створити всередині кожного файлу через import.meta.url.
— herve

46

всередині модуля ви можете виконати будь-яке з наступних дій, щоб отримати повний шлях з назвою файлу

this.filename;
module.filename;
__filename;

Якщо ви просто хочете, щоб справжнє ім’я не було шляху чи розширення, ви можете зробити щось подібне.

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

4
Напевно, ви хочете використовувати path.sep, щоб зробити його крос-платформою. Ось що я зробив __filename.slice (__ filename.lastIndexOf (path.sep) +1);
— Райан

2
Тим, хто просто хоче скопіювати та вставити цей var path = require('path');module.filename.slice(__filename.lastIndexOf(require('path').sep)+1, module.filename.length -3);
— суперручний однолінійний матеріал

17
-3 передбачає тривалість розширення, щось подібне могло б працювати кращеpath.basename(module.filename, path.extname(module.filename))
— вівторок

32

Щоб отримати лише ім'я файлу. Немає додаткового модуля просто:

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

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

Це те, за що я прийшов сюди. Дякую!
— leviathanbadger

1
Це має бути прийнятою відповіддю. Працює в суворому режимі. Дуже прямо. Дякую!
— Матвій

2
Якщо ваше розширення не має 2 символи, це цілком можливо, тому що ви можете прив’язати інтерпретацію сценарію до будь-якого розширення файлу, яке ви хочете ... тож це може бути не дуже хорошим рішенням.
— ErikE

24
'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' ]
 *
**/

Тут ми використовуємо роздільну функцію з регулярним виразом як перший параметр.
Регулярний вираз, який ми хочемо для роздільника, є [\/](розділений на /або \), але /символ повинен бути уникнути, щоб відрізнити його від термінатора регулярних виразів /, так /[\\/]/.

const scriptName = __filename.split(/[\\/]/).pop(); // Remove the last array element
console.log(scriptName);
// 'yourScript.js'

Не використовуйте це

Ви дійсно повинні використовувати path.basenameзамість цього (вперше задокументовано в Node.js v0.1.25 ), оскільки він обробляє всі кутові випадки, про які ви не хочете знати, як імена файлів з косою рисою всередині (наприклад, файл з назвою "foo \ bar" на unix). Дивіться pathвідповідь вище .


Будь ласка, додайте пояснення
— Daniel Cheung

@DanielCheung Ось ти! Але насправді все це можна шукати в Інтернеті, просто гугл javascript splitі розпочати.
— ilyaigpetrov

3
Я допомагав вам ... -_- За вашу відповідь голосували за видалення. Відповідь, яка недостатньо пояснює або просто містить код, буде видалена.
— Даніель Ченг

3

Ви також можете подивитися на консоль плюс . Це додає ім'я файлу та кількість ліній до будь-якого тексту журналу та має різні кольори для .log, .info та .error.


Дуже здорово. Встановіть за допомогою "npm install --save console plus", або якщо ви використовуєте пряжу: "пряжа додати консоль плюс"
— Andrew Faulkner

1

Ну, я хотів використовувати ім'я файлу як тег для реєстратора, тому найпростіший вперед, і що я хотів, це це:

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

1

Я знаю, що це вже давно, але те, що я зробив, це __filename.split('\\').pop(). Ви отримаєте повний шлях з назвою файлу, розділіть його на \потім отримайте останній індекс, який буде вашим ім'ям файлу.


1
На macOS__filename.split('/').pop()
— Reece Daniels

1

Ви можете використовувати цю функцію, щоб отримати ім'я файлу:

/**
 * @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, ви можете встановити пакет, що включає цю функцію https://www.npmjs.com/package/jotils

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.