模块加载
Lua模块加载详解:require搜索路径、自定义加载器。
1. require 机制
local json = require("cjson")
搜索顺序:
package.loaded缓存package.preload预加载器package.searchers搜索器
2. 搜索路径
-- 查看当前路径
print(package.path) -- Lua 文件搜索路径
print(package.cpath) -- C 库搜索路径
-- 修改搜索路径
package.path = package.path .. ";./?.lua;./lib/?.lua"
路径模板:
?替换为模块名/usr/local/share/lua/5.4/?.lua/usr/local/lib/lua/5.4/?.so
3. 自定义加载器
table.insert(package.searchers, function(name)
if name == "virtual" then
return function()
return { hello = function() print("virtual module") end }
end
end
end)
local v = require("virtual")
v.hello() -- "virtual module"
4. 模块编写
-- mymodule.lua
local M = {}
function M.greet(name)
return "Hello, " .. name
end
return M