Hammerspoon中从下级目录导入Lua脚本出错,请求排查问题
问题定位与解决方案
核心问题点
require语法错误:添加了多余的.lua后缀,导致Lua尝试加载动态库而非Lua脚本- 模块定义错误:未初始化模块table,且返回值错误(返回0而非模块对象)
- 路径分隔符使用不当:Lua模块路径规范用
.而非/
修正后的代码
init.lua
-- 使用Lua模块规范的路径(不加.lua后缀,用.分隔目录) local web_elem_poc = require "web_elements.web_elem_poc" doc = {} function doc.init() web_elem_poc.helloWorld("1234") end -- 必须调用初始化函数才能绑定快捷键 doc.init()
web_elements/web_elem_poc.lua
-- 先创建模块table用于导出方法 local web_elem_poc = {} function web_elem_poc.helloWorld(content) hs.hotkey.bind( {"cmd", "alt", "ctrl"}, "W", function() hs.alert.show(content) end ) end -- 返回模块table,让require能获取到导出的方法 return web_elem_poc
关键说明
require路径规范:Lua会自动为require的路径补全.lua后缀,手动添加会导致Lua错误地寻找带.lua后缀的动态库(如.dylib/.so),这正是你看到错误日志的原因。同时跨目录导入需用.作为目录分隔符,而非/。- 模块结构规范:Lua模块必须先定义一个table,将需要导出的方法挂载到这个table上,最后返回该table。你之前直接使用
web_elem_poc.helloWorld时,web_elem_poc这个table并未初始化,且返回0会导致require得到的是数值0,无法调用方法。 - 目录结构要求:确保你的文件目录结构如下,Hammerspoon默认会将
~/.hammerspoon加入Lua的搜索路径:
~/.hammerspoon/ ├── init.lua └── web_elements/ └── web_elem_poc.lua
内容的提问来源于stack exchange,提问作者Alex von Stuelpnagel
相关产品推荐
相关产品推荐

