اذهب إلى المحتوى

السؤال

نشر

أحاول عمل صفحة في تطبيق React وفي هذه الصفحة يجب أن تظهر كل إصدارات المكتبات المستخدمه في مشروع React هذا، أي أن يظهر عنصر ul بداخلة عنصر li لكل مكتبة مثبتة مع إصدارها أيضًا.

لذلك أريد أن أحصل على إصدار المكتبات المثبتة من خلال ملف package.json ولكن برمجيًا أي ليس من خلال فتح الملف وقراءته يدويًا بل من خلال دالة ما أو شيء من هذا القبيل. أعلم أن create-reacte-app يمنع إستدعاء الملفات من خارج مجلد src لذلك لا يخطر على بالي حل لهذه المشكلة.

Recommended Posts

  • 0
نشر (معدل)

يمكنك أن تقوم بذلك من خلال إستدعاء ملف ال package.json  طالما تستخدم react-scripts بإصدار 1.0.11 فما أحدث وذلك كالتالي 

import packages from '/package.json'

بعد ذلك لكي تستطيع الوصول إلى ماتريد فلاحظ أنها تنقسم إلى قسمين: 

  1. dependencies

  2. devDependencies

ولكي تستطيع أن تحصل على هذه البيانات كل ماعليك هو القيام بالتالي 

const dependencies = {...packages.dependencies, ...packages.devDependencies} 

وسوف تحصل في النهايه على object يحتوي على كل المكتبات التي تستخدمها بالإضافة الى الإصدار الخاصه بكل مكتبه وتقوم بعرضها كما تشاء.

ويمكنك إستخدام الكود التالي لعرضهم كما تريد بحيث يظهر عنصر ul بداخلة عنصر li لكل مكتبة مثبتة مع إصدارها أيضًا.

 const dependencies = {
    ...packages.dependencies,
    ...packages.devDependencies
  };
  const modifiedDependancies = [];
  for (const i in dependencies) {
    modifiedDependancies.push({ name: i, version: dependencies[i] });
  }

  return (
    <ul>
      {modifiedDependancies.map((item) => (
        <li key={item.name}>
          {item.name} : {item.version}
        </li>
      ))}
    </ul>
  );

 

تم التعديل في بواسطة Abdullah Muhammad
إضافة كود لتوضيح عرض ال dependancies
  • 0
نشر

ببساطة يمكنك عرض جميع المكتبات بإستخدام npm ls

في المكون الخاص بك أكتب مايلي.

const dependancies = [];
require('child_process').exec('npm ls --json', function(err, stdout, stderr) {
    if (err) return cb(err)
    dependancies.push(JSON.parse(stdout))
  });

عرض المصفوفة  dependencies

console.log(dependencies);

//   النتيجة
/*

[
 { name: 'aws-amplify', version: '^5.10.2' },
 { name: 'classnames', version: '^2.2.6' },
 { name: 'lodash', version: '^4.17.15' }
]

*/

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...