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

السؤال

نشر

أريد أن أستخدم صورة موجودة لدي في مجلد  public داخل المشروع الرئيسي وليست موجودة داخل مجلد src وعند محاولة إستدعاء هذه الصورة يحدث الخطأ التالي:

./src/components/website_index.js Module not found: You attempted to import ../../public/logo.jpg which falls outside of the project src/ directory. Relative imports outside of src/ are not supported. You can either move it inside src/, or add a symlink to it from project's node_modules/.

وهذا هو الكود الذي كتبته:

import logo from '../../public/logo.png';
<img alt="My Brand" src={logo}/>

هل توجد طريقة لفعل ذلك؟

Recommended Posts

  • 1
نشر

هذا قيد خاص أضافه مطورو حزمة create-react-app ويتم تنفيذه في ModuleScopePlugin لضمان بقاء الملفات في src /، ويضمن هذا المكون الإضافي أن الإستيرادات النسبية relative imports من مجلد التطبيق لا تصل إلى خارجه (أي لا يمكن للمشروع في حالة production أن يصل إلى مجلد src لأسباب أمنية)، ومع ذلك يمكنك أن تزيل هذا القيد من خلال إستخدام حزمة react-app-rewired من خلال الخطوات التالية:

تثبيت الحزمة:

npm install react-app-rewired --save-dev

 

قم بصنع ملف باسم config-overrides.js في مجلد المشروع الرئيسي، وأكتب بداخله:

// نستدعي إضافة ModuleScopePlugin
const ModuleScopePlugin = require('react-dev-utils/ModuleScopePlugin');

// وهنا نقوم بتعديل الإعدادت وحذفها منها
module.exports = function override(config, env) {
    config.resolve.plugins = config.resolve.plugins.filter(plugin => !(plugin instanceof ModuleScopePlugin));
    return config;
};

 

عدل على ملف package.json كالتالي:

"scripts": {
   "start": "react-app-rewired start",
   "build": "react-app-rewired build",
   "test": "react-app-rewired test"
}

 

شغل المشروع للتجربة

npm start

// Build your app
npm run build

 

بالرغمن من كل الخطوات السابقة إلا أنه لا يجب أن تستورد من المجلد public - حيث سيتم تكرار تلك الملفات في مجلد build وسيكون متاحًا من خلال عنوانين URL مختلفين، مما يؤدي في النهاية إلى تفاقم حجم تنزيل الحزمة. بينما الإستيراد من مجلد src لأفضل وله مميزات أكثر لأن كل شيء يتم حزمه وضغطه من خلال webpack وستكون حينها كل الصور والملفات أكفاءة فضل في التحميل.

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...