Windows下 lua busted 找不到 module 解决办法

本文详细解析了在使用LuaRocks环境下,遇到的模块加载失败问题,并提供了具体的解决方案,通过修改busted.bat文件中的LUA_PATH设置,成功解决了require找不到模块的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出错提示

C:\Users\gongjue\dotfiles\engineering\unit-test>busted busted-simple.lua
鈼忊棌鈼忊湵
3 successes / 0 failures / 1 error / 0 pending : 0.0 seconds

Error 鈫?busted-simple.lua @ 29
Busted unit testing framework should be awesome should have mocks and spies for functional tests
busted-simple.lua:30: module 'thing_module' not found:
        no field package.preload['thing_module']
        no file './src/thing_module.lua'
        no file './src/thing_module/thing_module.lua'
        no file './src/thing_module/init.lua'
        no file 'C:\local\LuaRocks-3.0.2\systree/share/lua/5.3/thing_module.lua'
        no file 'C:\local\LuaRocks-3.0.2\systree/share/lua/5.3/thing_module/init.lua'
        no file '%LUA_PATH%'
        no file './csrc/thing_module.dll'
        no file './csrc/thing_module/thing_module.dll'
        no file 'C:\local\LuaRocks-3.0.2\systree/lib/lua/5.3/thing_module.dll'
        no file '%LUA_CPATH%'

问题分析

从错误输出可以看到 lua 在 require 时没有搜索当前路径下的文件。所以把当前路径加到 LUA_PATH 中就能解决问题。

解决办法

按照笔者 Windows 平台 Luarocks 3.0.2 编译安装 的方法,LuaRocks安装在 C:\local\LuaRocks-3.0.2,打开 C:\local\LuaRocks-3.0.2\systree\bin\busted.bat 可看到原始内容是:

@echo off

set "LUAROCKS_SYSCONFDIR=C:\local\LuaRocks-3.0.2"

set "LUA_PATH=C:\local\LuaRocks-3.0.2\systree/share/lua/5.3/?.lua;C:\local\LuaRocks-3.0.2\systree/share/lua/5.3/?/init.lua;%%LUA_PATH%%"

set "LUA_CPATH=C:\local\LuaRocks-3.0.2\systree/lib/lua/5.3/?.dll;%%LUA_CPATH%%"

set "LUA_INIT=local k,l,_=pcall(require,'luarocks.loader') _=k and l.add_context('busted','2.0.rc13-0')"

"C:\local\lua-5.3.5\dist\bin\lua.exe" "C:\local\LuaRocks-3.0.2\systree\lib\luarocks\rocks-5.3\busted\2.0.rc13-0\bin\busted" %*

exit /b %ERRORLEVEL%

可见在没有定义 LUA_PATH 的时候是不会读当前路径的。按笔者文章中的做法也的确没有设定。所以按 Lua 默认的路径修改以上 bat 文件(参照 Difference between require and dofile 中列出的一些默认路径,主要增加 .\?.lua 类似的模式来让 Lua 扫描当前文件所在的路径下的文件。修改后如下:

@echo off

set "LUAROCKS_SYSCONFDIR=C:\local\LuaRocks-3.0.2"

set "LUA_PATH=.\?.lua;C:\local\LuaRocks-3.0.2\systree/share/lua/5.3/?.lua;C:\local\LuaRocks-3.0.2\systree/share/lua/5.3/?/init.lua;%%LUA_PATH%%"

set "LUA_CPATH=.\?.dll;.\?53.dll;C:\local\LuaRocks-3.0.2\systree/lib/lua/5.3/?.dll;%%LUA_CPATH%%"

set "LUA_INIT=local k,l,_=pcall(require,'luarocks.loader') _=k and l.add_context('busted','2.0.rc13-0')"

"C:\local\lua-5.3.5\dist\bin\lua.exe" "C:\local\LuaRocks-3.0.2\systree\lib\luarocks\rocks-5.3\busted\2.0.rc13-0\bin\busted" %*

exit /b %ERRORLEVEL%


保存上述内容再次运行就不再报错了。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值