quick-cocos2d-x平台的Lua源码打包及加密功能是其提供的方便功能之一(具体可参考lonewolf的这篇文章)。今天Quick-x群里的一位朋友在使用时遇到了点问题,经过我们的探讨找到了原因。虽然是个小问题,不过还是顺手记录一下,以便今后自己和大家查询。
这位朋友在app/scenes/MyScene.lua文件里使用了以下语句调用另一个模块:
local SocketTCP = require("app.Utitls.SocketTCP")
所调用的模块文件SocketTcp.lua放在app/Utitls目录下,在player下面直接调试脚本文件时运行一切正常。但将Lua脚本文件打包后,运行时就出现错误提示:
LUA ERROR: [string "app.scenes.MyScene"]:0: module 'app.Utitls.SocketTCP' not found:
no field package.preload['app.Utitls.SocketTCP']
no file '.\app\Utitls\SocketTCP.lua'
no file 'G:\stuffs\tsett\proj.win32\aa\lua\app\Utitls\SocketTCP.lua'
......(后面还有一大堆路径查找提示)
开始怀疑是运行时没有加载上源码包,或者是源码打的包有问题,但调试发现所有打包的文件在preload阶段都是已经正确载入了的。
进一步调试,确认错误就出在上述require语句。仔细检查,发现文件名里是“Tcp”,而代码里引用的是“TCP”,是不是大小写的原因呢?修改代码如下,重新打包运行果然正常了:
local SocketTCP = require("app.Utitls.SocketTcp")
回过头看,查出的原因虽然有点出乎意料,但却在情理之中。因为没打包之前,载入的是Lua文件,文件名在Windows平台下是不区分大小写的。而打包之后,模块在压缩包里变成了app.Utitls.SocketTcp这种形式,查看preload的相关代码可以看到,在查询预载入的模块名时是区分大小写的。
来源:oschina
链接:https://my.oschina.net/u/1412162/blog/189341