0Pricing
Lua Academy · บทเรียน

จัดแพ็กเกจปลั๊กอิน

จัดโครงสร้างและแบ่งปันปลั๊กอิน

จัดแพ็กเกจปลั๊กอิน เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน

โครงสร้างไดเรกทอรีปลั๊กอิน

ปลั๊กอิน Neovim เป็นเพียงไดเรกทอรีบน runtimepath โครงสร้างตามแบบแผนมีโฟลเดอร์ระดับบนสุดที่ Neovim จัดการเป็นพิเศษ

ไดเรกทอรีสำคัญ ได้แก่ lua/ สำหรับมอดูล plugin/ สำหรับการตั้งค่าที่โหลดอัตโนมัติ ftplugin/ สำหรับสคริปต์ชนิดไฟล์ doc/ สำหรับเอกสารช่วยเหลือ และ after/ สำหรับการกำหนดทับภายหลัง

-- myplugin/
--   lua/myplugin/init.lua
--   plugin/myplugin.lua
--   doc/myplugin.txt

ไดเรกทอรี lua/

ไฟล์ภายใต้ lua/ สามารถเข้าถึงได้ด้วย require มอดูลที่ lua/myplugin/init.lua จะถูกโหลดเป็น require('myplugin')

การซ้อนโฟลเดอร์จะสอดคล้องกับเส้นทางแบบจุด: lua/myplugin/config.lua จะกลายเป็น require('myplugin.config') นี่คือวิธีที่ปลั๊กอินเปิดเผยพื้นที่ชื่อสาธารณะที่เป็นระเบียบ

-- in lua/myplugin/init.lua
local M = {}
function M.hello() print('hi') end
return M

การคืนตารางมอดูล

รูปแบบมอดูลตามสำนวนที่ใช้กันทั่วไปจะประกาศตารางเฉพาะที่ M แนบฟังก์ชัน แล้วคืนตารางนั้น ผู้เรียกจึงเข้าถึงได้ด้วย require('myplugin').hello()

เก็บฟังก์ชันช่วยภายในเป็นตัวแปรเฉพาะที่ธรรมดา เพื่อให้เฉพาะส่วนติดต่อที่ตั้งใจไว้เป็นสาธารณะ แนวทางนี้คล้ายการห่อหุ้มมอดูลในระบบนิเวศอื่น ๆ

local M = {}
local function private() end
function M.run() private() end
return M

ข้อตกลง setup()

ปลั๊กอินส่วนใหญ่มีฟังก์ชัน setup(opts) ซึ่งรวมตัวเลือกของผู้ใช้เข้ากับค่าเริ่มต้น โดยให้ค่าของผู้ใช้ทับค่าเริ่มต้น และดำเนินการเริ่มต้นระบบ เช่น สร้างคำสั่งและคำสั่งทำงานอัตโนมัติ

ใช้ vim.tbl_deep_extend('force', defaults, opts or {}) เพื่อให้การตั้งค่าบางส่วนของผู้ใช้ยังคงได้รับค่าเริ่มต้นทั้งหมด

local M = {}
local defaults = { width = 40 }
function M.setup(opts)
  M.config = vim.tbl_deep_extend('force', defaults, opts or {})
end
return M

ไดเรกทอรี plugin/

สคริปต์ใน plugin/ จะทำงานโดยอัตโนมัติเมื่อ Neovim เริ่มทำงาน หลังจากสร้าง runtimepath แล้ว ควรให้สคริปต์เหล่านี้มีขนาดเล็กมาก

งานทั่วไปคือการลงทะเบียนคำสั่งหรือกลไกป้องกัน เพื่อให้มอดูลที่ใช้ทรัพยากรมากโหลดเมื่อจำเป็น หลีกเลี่ยงงานที่ใช้ทรัพยากรมากที่นี่ เลื่อนไปทำใน setup หรือคำสั่งทำงานอัตโนมัติ เพื่อให้เริ่มต้นได้รวดเร็ว

-- in plugin/myplugin.lua
if vim.g.loaded_myplugin then return end
vim.g.loaded_myplugin = true

กลไกป้องกันการโหลดซ้ำ

กลไกป้องกันการโหลดจะป้องกันการเริ่มต้นซ้ำหากไฟล์ถูกอ่านเข้ามาสองครั้ง ตั้งค่าสถานะ vim.g.loaded_* แล้วหยุดทำงานทันทีเมื่อถูกเรียกซ้ำ

สิ่งนี้จำเป็น เพราะตัวจัดการปลั๊กอินและ :runtime อาจอ่านไฟล์ซ้ำ และคำสั่งหรือคำสั่งทำงานอัตโนมัติที่ซ้ำกันจะทำให้เกิดบั๊กที่สังเกตได้ยาก

if vim.g.loaded_myplugin == 1 then return end
vim.g.loaded_myplugin = 1

การโหลดเมื่อจำเป็น

การเริ่มต้นที่รวดเร็วหมายถึงการโหลดโค้ดเฉพาะเมื่อจำเป็น ลงทะเบียนคำสั่งขนาดเล็กใน plugin/ ซึ่งเรียกใช้มอดูลขนาดใหญ่เมื่อใช้งานครั้งแรก

ตัวจัดการปลั๊กอินอย่าง lazy.nvim ทำให้แนวทางนี้เป็นระบบด้วยตัวกระตุ้น cmd ft และ keys ดังนั้นมอดูลของคุณจะยังไม่ถูกแตะต้องจนกว่าจะถูกเรียกใช้

vim.api.nvim_create_user_command('MyStart', function()
  require('myplugin').run()
end, {})

เส้นทางรันไทม์และเส้นทางแพ็กเกจ

Neovim ค้นพบปลั๊กอินโดยสแกน runtimepath ระบบแพ็กเกจดั้งเดิมจะโหลดไดเรกทอรีใต้ pack/*/start/ โดยอัตโนมัติ และโหลด pack/*/opt/ เมื่อต้องการผ่าน :packadd

ผู้ใช้ส่วนใหญ่พึ่งพาตัวจัดการ แต่การเข้าใจ runtimepath จะช่วยอธิบายว่าระบบค้นหาโฟลเดอร์ของคุณอย่างไร

print(vim.o.runtimepath:sub(1, 60))
-- :packadd loads an opt plugin manually

การตรวจสอบสุขภาพ

จัดเตรียม lua/myplugin/health.lua ที่มีฟังก์ชัน check เพื่อให้ผู้ใช้เรียกใช้ :checkhealth myplugin ได้ รายงานสถานะด้วย API vim.health

ใช้ vim.health.start vim.health.ok vim.health.warn และ vim.health.error เพื่อแสดงการพึ่งพาที่ขาดหายอย่างชัดเจน

local M = {}
function M.check()
  vim.health.start('myplugin')
  vim.health.ok('all good')
end
return M

เอกสารและป้ายกำกับ

ส่งมอบไฟล์ช่วยเหลือ doc/myplugin.txt เรียกใช้ :helptags doc/ (หรือปล่อยให้ตัวจัดการดำเนินการ) เพื่อสร้างดัชนีป้ายกำกับ ทำให้ :help myplugin ใช้งานได้

เอกสารที่ดีควรระบุคำสั่ง ตัวเลือกของ setup และการกำหนดปุ่มลัดเริ่มต้น ทำให้ค้นพบปลั๊กอินได้จากภายใน Neovim

-- generate tags from the doc directory
vim.cmd('helptags ' .. vim.fn.expand('%:p:h'))

การจัดการเวอร์ชันและการเผยแพร่

ฝากปลั๊กอินไว้ในคลัง git ผู้ใช้ติดตั้งผ่านเส้นทาง owner/repo กำหนดแท็กให้รุ่นต่าง ๆ ตามรูปแบบเวอร์ชันเชิงความหมาย เพื่อให้ตัวจัดการสามารถตรึงเวอร์ชันได้

ใส่ README พร้อมตัวอย่างคำสั่งติดตั้งสำหรับตัวจัดการยอดนิยม ใบอนุญาต และตัวอย่างการตั้งค่าขั้นต่ำ เพื่อลดอุปสรรคในการเริ่มใช้งาน

-- lazy.nvim spec
-- { 'owner/myplugin', config = function()
--     require('myplugin').setup({})
--   end }

ตรวจสอบอย่างรวดเร็ว

ยืนยันความเข้าใจเกี่ยวกับการจัดแพ็กเกจปลั๊กอิน

ทบทวน: การจัดแพ็กเกจปลั๊กอิน

ปลั๊กอินคือไดเรกทอรี runtimepath ที่มีมอดูลใน lua/ สคริปต์ plugin/ ที่ทำงานอัตโนมัติ และไฟล์เสริมอย่าง doc/ ftplugin/ และไฟล์ตรวจสอบสุขภาพ

คืนตารางมอดูล เปิดเผย setup ที่รวมค่าเริ่มต้น ป้องกันการโหลดซ้ำ โหลดโค้ดที่ใช้ทรัพยากรมากเมื่อจำเป็น จัดทำเอกสารด้วยแท็กช่วยเหลือ และเผยแพร่ผ่าน git พร้อมแท็กเวอร์ชันตามความหมาย

คำถามที่พบบ่อย

บทเรียน “จัดแพ็กเกจปลั๊กอิน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “จัดแพ็กเกจปลั๊กอิน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “จัดแพ็กเกจปลั๊กอิน”

จัดโครงสร้างและแบ่งปันปลั๊กอิน คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “จัดแพ็กเกจปลั๊กอิน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม

ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. API ภาษา Lua ของ Neovim
  2. คำสั่งและแผนผังคีย์
  3. บัฟเฟอร์และหน้าต่าง
  4. จัดแพ็กเกจปลั๊กอิน
← กลับไปที่ Lua Academy