You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:30:58