feat(自动加载): 实现自动require库的功能

添加auto_require模块,当访问未加载的库时自动require
包含测试程序验证自动加载功能
预加载常用库到缓存以提高性能
This commit is contained in:
2025-09-01 18:04:19 +08:00
parent 2016bef5c4
commit eec11a2845
3 changed files with 75 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
-- auto_require.lua: Automatically require libraries when accessed
local original_ENV = _ENV
-- List of common libraries to auto-require
local common_libs = {
"rc", "fs", "term", "colors", "textutils", "window",
"keys", "peripheral", "redstone", "rs", "monitor",
"modem", "http", "json", "image", "paint", "sound"
}
-- Pre-load common libraries into a cache
local lib_cache = {}
for _, lib_name in ipairs(common_libs) do
local success, lib = pcall(require, lib_name)
if success then
lib_cache[lib_name] = lib
end
end
-- Create a new environment with auto-require functionality
local auto_env = setmetatable({}, {
__index = function(_, key)
-- Check if the key exists in the original environment
local val = original_ENV[key]
if val ~= nil then
return val
end
-- Check if the key is in our pre-loaded cache
if lib_cache[key] then
return lib_cache[key]
end
-- Try to require the module
local success, lib = pcall(require, key)
if success then
lib_cache[key] = lib
return lib
end
-- If all else fails, return nil
return nil
end
})
-- Replace the global environment with our auto-require environment
setmetatable(_G, {
__index = auto_env
})
return {}

View File

@@ -0,0 +1,21 @@
-- Test auto_require functionality
-- This program doesn't explicitly require 'textutils'
-- Try to use textutils without requiring it first
textutils.coloredPrint(colors.green, "Auto-require test successful!", colors.white)
textutils.printTable({test = "This should work without require"})
-- Try another library
term.setTextColor(colors.yellow)
print("Using term library without require:")
term.at(1, 3).write("Cursor moved using term library")
-- Test a library that might not be pre-loaded
game = fs.open("/test.txt", "w")
if game then
game.write("Testing fs library")
game.close()
print("File written successfully")
else
print("Failed to open file")
end

View File

@@ -0,0 +1,2 @@
-- Load auto_require module to automatically require libraries
require("auto_require")