quick-cocos2d-x平臺Lua源碼打包後運行出錯的一種狀況

quick-cocos2d-x平臺的Lua源碼打包及加密功能是其提供的方便功能之一(具體可參考lonewolf的這篇文章)。今天Quick-x羣裏的一位朋友在使用時遇到了點問題,通過咱們的探討找到了緣由。雖然是個小問題,不過仍是順手記錄一下,以便從此本身和你們查詢。shell

這位朋友在app/scenes/MyScene.lua文件裏使用瞭如下語句調用另外一個模塊:app

local SocketTCP = require("app.Utitls.SocketTCP")

所調用的模塊文件SocketTcp.lua放在app/Utitls目錄下,在player下面直接調試腳本文件時運行一切正常。但將Lua腳本文件打包後,運行時就出現錯誤提示:ui

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」,是否是大小寫的緣由呢?修改代碼以下,從新打包運行果真正常了:lua

local SocketTCP = require("app.Utitls.SocketTcp")

回過頭看,查出的緣由雖然有點出乎意料,但卻在情理之中。由於沒打包以前,載入的是Lua文件,文件名在Windows平臺下是不區分大小寫的。而打包以後,模塊在壓縮包裏變成了app.Utitls.SocketTcp這種形式,查看preload的相關代碼能夠看到,在查詢預載入的模塊名時是區分大小寫的。spa

相關文章
相關標籤/搜索