0Pricing
Lua Academy · درس

اكتشاف الإضافات وتحميلها

افحص المجلدات بحثًا عن ملفات الإضافات وحمّلها باستخدام require أو loadfile

اكتشاف الإضافات وتحميلها درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.

ما هي بنية الإضافات؟

تسمح بنية الإضافات لشفرة من جهات خارجية بتوسيع التطبيق من دون تعديل نواته. وتجعل إمكانيتا require والتحميل الديناميكي في Lua هذا الأسلوب طبيعيًا.

اكتشاف الإضافات وفق اصطلاح التسمية

افحص مجلدًا بحثًا عن ملفات *.lua التي تطابق اصطلاح تسمية، ثم حمّل كل ملف كإضافة.

local function discoverPlugins(dir)
  local plugins = {}
  -- platform-specific dir scan; here a mock example
  for _, name in ipairs({"logger", "cache", "auth"}) do
    local ok, mod = pcall(require, dir .. "." .. name)
    if ok then plugins[name] = mod end
  end
  return plugins
end

استخدام package.path للاكتشاف

وسّع package.path حتى يتمكن require من العثور على الإضافات في مجلد مخصّص.

package.path = package.path .. ";./plugins/?.lua"
local plugin = require("myplugin")

استخدام loadfile للتحميل الديناميكي

تُجمّع loadfile(path) ملف Lua في كتلة من دون تنفيذها. نفّذها باستخدام () للحصول على جدول وحدة الإضافة.

local function loadPlugin(path)
  local chunk, err = loadfile(path)
  if not chunk then return nil, err end
  local ok, result = pcall(chunk)
  if not ok then return nil, result end
  return result
end

بيان الإضافة

تصدّر كل إضافة جدول بيان يصف اسمها وإصدارها وتبعياتها.

-- plugins/logger.lua
return {
  name    = "logger",
  version = "1.0",
  deps    = {},
  init    = function(app) app:on("log", print) end,
}

حل التبعيات

قبل تهيئة الإضافة، تحقّق من تحميل جميع تبعياتها مسبقًا.

local function initPlugin(app, plugins, name)
  local p = plugins[name]
  if not p then error("Plugin not found: " .. name) end
  for _, dep in ipairs(p.deps or {}) do
    if not plugins[dep] then
      error(("Plugin %s requires %s"):format(name, dep))
    end
  end
  if p.init then p.init(app) end
end

إعادة تحميل الإضافات أثناء التشغيل

لإعادة تحميل إضافة: أزلها من package.loaded، ثم أعد تحميلها باستخدام require، وأعد تسجيل الخطافات.

package.loaded["plugins.logger"] = nil
plugins.logger = require("plugins.logger")
plugins.logger.init(app)

سجل الإضافات

احتفظ بسجل للإضافات المحمّلة لمنع تحميل الإضافة مرتين وتمكين التحقق من التبعيات.

عزل الأخطاء

حمّل الإضافات باستخدام pcall حتى لا تتسبب إضافة معطوبة في تعطيل التطبيق بالكامل.

local ok, err = pcall(function()
  plugins[name] = loadPlugin(path)
  initPlugin(app, plugins, name)
end)
if not ok then
  print("Plugin load failed:", name, err)
end

البيانات الوصفية للإضافة

خزّن بيانات وصفية إضافية، مثل الوصف والمؤلف ومخطط الإعدادات. استخدمها لعرض واجهة المستخدم أو للتهيئة التلقائية.

التحميل الكسول

حمّل الإضافات فقط عند الحاجة إليها لأول مرة بدلًا من تحميلها مسبقًا عند بدء التشغيل. نفّذ ذلك عبر جدول وكيل يحتوي على دالة metamethod هي __index وتُشغّل التحميل.

سؤال حول تحميل الإضافات

ما فائدة استخدام pcall عند تحميل الإضافات؟

مراجعة: اكتشاف الإضافات وتحميلها

اكتشف الإضافات عبر فحص المجلدات أو استخدام اصطلاحات التسمية. حمّلها باستخدام loadfile أو require. تحقّق من صحة بيانات البيان وحلّ التبعيات. استخدم دائمًا pcall لعزل إخفاقات التحميل.

الأسئلة الشائعة

هل درس «اكتشاف الإضافات وتحميلها» مجاني؟

نعم — نص درس «اكتشاف الإضافات وتحميلها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.

ماذا ستتعلم في «اكتشاف الإضافات وتحميلها»؟

افحص المجلدات بحثًا عن ملفات الإضافات وحمّلها باستخدام require أو loadfile تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟

لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «اكتشاف الإضافات وتحميلها»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟

نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. اكتشاف الإضافات وتحميلها
  2. واجهة API للإضافات ونظام الخطافات
  3. وضع تنفيذ الإضافات في بيئة معزولة
  4. إدارة الإصدارات والتبعيات
← العودة إلى Lua Academy