Skip to content

مسارات الملفات في Node.js

مسارات ملفات النظام

كل ملف في النظام له مسار. في لينكس و macOS، قد يبدو المسار هكذا: /users/joe/file.txt

بينما أجهزة الكمبيوتر التي تعمل بنظام Windows لها بنية مختلفة مثل: C:\users\joe\file.txt

تحتاج إلى الانتباه عند استخدام المسارات في تطبيقاتك، حيث يجب مراعاة هذا الاختلاف.

استخدام الوحدة النمطية path

تقوم بتضمين هذه الوحدة في ملفاتك باستخدام:

javascript
const path = require('node:path')

ويمكنك البدء في استخدام طرقها.

الحصول على المعلومات من مسار

بإعطاء مسار، يمكنك استخراج المعلومات منه باستخدام هذه الطرق:

  • dirname: يحصل على المجلد الرئيسي للملف
  • basename: يحصل على جزء اسم الملف
  • extname: يحصل على امتداد الملف

مثال

javascript
const path = require('node:path')
const notes = '/users/joe/notes.txt'

path.dirname(notes) // /users/joe
path.extname(notes) // .txt
javascript
import path from 'node:path'
const notes = '/users/joe/notes.txt'

path.dirname(notes) // /users/joe
path.extname(notes) // .txt

يمكنك الحصول على اسم الملف بدون الامتداد من خلال تحديد وسيطة ثانية لـ basename:

javascript
path.basename(notes, path.extname(notes)) // notes

العمل مع المسارات

يمكنك ضم جزئين أو أكثر من مسار باستخدام path.join():

javascript
path.join('/users', 'joe', 'file.txt') // /users/joe/file.txt

يمكنك الحصول على حساب المسار المطلق لمسار نسبي باستخدام path.resolve():

javascript
path.resolve('joe.txt') // /Users/joe/joe.txt إذا تم تشغيله من مجلد منزلي
path.resolve('tmp', 'joe.txt') // /Users/joe/tmp/joe.txt إذا تم تشغيله من مجلد منزلي

في هذه الحالة، سيقوم Node.js ببساطة بإضافة /joe.txt إلى دليل العمل الحالي. إذا قمت بتحديد وسيطة ثانية كمجلد، فسوف تستخدم resolve الأولى كأساس للثانية.

إذا بدأت الوسيط الأول بسلاش، فهذا يعني أنها مسار مطلق:

javascript
path.resolve('/etc', 'joe.txt') // /etc/joe.txt

path.normalize() هي دالة مفيدة أخرى ستحاول حساب المسار الفعلي عندما يحتوي على محددات نسبية مثل . أو ..، أو سلاش مزدوج:

javascript
path.normalize('/users/joe/../test.txt') // /users/test.txt

لا يقوم كل من resolve و normalize بالتحقق من وجود المسار. إنها تحسب مسارًا فقط بناءً على المعلومات التي حصلت عليها.