নোড.জেএস - বর্তমান ফাইলের নাম পাওয়া যাচ্ছে


121

বর্তমান ফাইলের নাম, ফাংশনের নাম এবং লাইন নম্বর কীভাবে পাবেন?

আমি / লগিং জন্য এটি ব্যবহার করতে উদ্দেশ্য, সমতুল্য করার ডিবাগ চান __FILE__, __LINE__ গ


উত্তর:


230

নোড.জেএস এটি করার জন্য একটি স্ট্যান্ডার্ড এপিআই সরবরাহ করে: পথ ।

বর্তমান স্ক্রিপ্টটির নাম পাওয়া তখন সহজ:

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))
— হেরেভ

6
এক্সটেনশনটি ফেলে দেওয়ার অন্য উপায়:path.parse(__filename).name
— আরএইচ বেকার

__filenameএকটি ES6 মডিউল মধ্যে সংজ্ঞায়িত করা হয় না।
— কুলুব

1
@ কুলুব, নোডেজের ডকুমেন্টেশন থেকে এক্সট্রাক্ট করুন : এই CommonJSভেরিয়েবলগুলি ইএস মডিউলগুলিতে উপলভ্য নয়। এর সমতুল্য __filenameএবং __dirnameপ্রতিটি ফাইলের মধ্যে দিয়ে তৈরি করা যেতে পারে import.meta.url।
— হার্ভে

46

মডিউলটির মধ্যে আপনি ফাইলের নাম সহ পুরো পথ পেতে নিম্নলিখিতগুলির যে কোনও একটি করতে পারেন

this.filename;
module.filename;
__filename;

আপনি যদি কোনও পথ বা প্রসার ছাড়াই প্রকৃত নামটি চান তবে আপনি এই জাতীয় কিছু করতে পারেন।

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

4
এটিকে ক্রস প্ল্যাটফর্ম করার জন্য আপনি সম্ভবত পথ.সেসপ ব্যবহার করতে চান। আমি __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))
— dre

32

শুধুমাত্র ফাইলের নাম পেতে। কেবল কোনও অতিরিক্ত মডিউল নেই:

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

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

এই জন্য আমি এখানে এসেছি। ধন্যবাদ!
— লিবিয়াথনবাদেগার

1
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। কঠোর মোডে কাজ করে। খুব সোজা। ধন্যবাদ!
— ম্যাথু

2
যদি না আপনার এক্সটেনশান 2 টি অক্ষর দীর্ঘ না হয়, যা সম্পূর্ণভাবে সম্ভব কারণ আপনি যে কোনও ফাইল এক্সটেনশানের সাথে স্ক্রিপ্ট ব্যাখ্যাকে বেঁধে রাখতে পারেন ... সুতরাং এটি সর্বোত্তম সমাধান নাও হতে পারে।
— এরিক مارچ

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পরিবর্তে আপনার ব্যবহার করা উচিত (প্রথম নোড.জেএস v0.1.25 তে নথিভুক্ত ), কারণ এটি কোণার সমস্ত ক্ষেত্রে পরিচালনা করে যা আপনি ভিতরে স্ল্যাশযুক্ত ফাইলের নামগুলি (যেমন ইউনিক্সে "foo \ বার" নামক ফাইল) জানতে চান না hand উপরেpath উত্তর দেখুন ।


দয়া করে ব্যাখ্যা যুক্ত করুন
— ড্যানিয়েল চেং

আপনি এখানে আছেন! তবে আসলে এই সমস্তগুলি ইন্টারনেটগুলিতে সন্ধানযোগ্য, কেবল গুগল javascript splitএবং চলছে।
— ইলিয়াগেটের্তেভ

3
আমি আপনাকে সাহায্য করছিলাম ... -_- আপনার উত্তর মোছার পক্ষে ভোট দেওয়া হচ্ছে। একটি উত্তর যথেষ্ট ব্যাখ্যা না বা শুধু ধারণকারী কোড হবে মোছা হয়েছে।
— ড্যানিয়েল চেউং

3

আপনি কনসোল-প্লাসটিও দেখতে পারেন । এটি কোনও লগিং পাঠ্যে ফাইলের নাম এবং লিনেনবার যুক্ত করে এবং .log, .info এবং .error এর জন্য বিভিন্ন বর্ণ ধারণ করে।


বেশ দারুন. "এনপিএম ইনস্টল - সেভ কনসোল-প্লাস" দিয়ে ইনস্টল করুন বা আপনি যদি সুতা ব্যবহার করছেন: "সুতা অ্যাড কনসোল-প্লাস"
— অ্যান্ড্রু ফকনার

1

ওয়েল, আমি লগারের জন্য ফাইলের নামটি ট্যাগ হিসাবে ব্যবহার করতে চেয়েছিলাম যাতে সবচেয়ে সোজা এগিয়ে যায় এবং যা আমি চাই তা হ'ল:

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

1

আমি জানি এটি ইতিমধ্যে অনেক দিন হয়ে গেছে তবে আমি যা করেছি তা হ'ল __filename.split('\\').pop()। এটি ফাইলের নাম সহ পুরো পাথ পাবে, এটিকে ভাগ করে নিন এবং \তারপরে সর্বশেষ সূচকটি পাবেন যা আপনার ফাইলের নাম হবে।


1
ম্যাকোজে__filename.split('/').pop()
— ড্যানিয়েলগুলি রিস করুন

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(/^.*[\\\/]/, '');
}

আপনি যদি নোডেজ ব্যবহার করেন তবে আপনি এই প্যাকেজটি ইনস্টল করতে পারেন যা এই ফাংশনটি অন্তর্ভুক্ত করে https://www.npmjs.com/package/jotils

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.