我们希望将第三方Lua模块(比如foo
)集成到我们的CoronaSDK应用程序中。这个模块模块CoronaSDK中package.path的问题
主代码是在foo/init.lua
,被要求作为require 'foo'
。
我们把这个模块插入corona/foo
:
corona/foo$ ls
init.lua
在corona/main.lua
我们:在模拟器
package.path = package.path .. ";"
.. package.path:gsub("?.lua", "?/init.lua")
require 'foo'
作品。然而,它并不在设备上运行:
Lua Runtime Error: lua_pcall failed with status: 2, error message is:
module 'foo' not found:resource (foo.lua) does not exist in
archive
no field package.preload['foo']
no file '/var/mobile/Applications/0B609A43-54E8-40E5-9D44-F3C93CC4031E/Appname.app/foo.lua'
no file '/var/mobile/Applications/0B609A43-54E8-40E5-9D44-F3C93CC4031E/Appname.app/foo.lua'
no file '/var/mobile/Applications/0B609A43-54E8-40E5-9D44-F3C93CC4031E/Appname.app/foo/init.lua'
no file '/var/mobile/Applications/0B609A43-54E8-40E5-9D44-F3C93CC4031E/Appname.app/foo/init.lua'
no file './foo.so'
奇怪的是,require 'foo.init'
确实工作。
任何线索?
这是非常奇怪的行为。如果'foo.init'起作用,那么理论上'foo'应该可以工作,如果'/ init.lua'在你的包路径中,它看起来是错误输出。 'foo'模块是如何设置的;它返回一个表或它使用模块()? Corona是否可能使用定制的'package.loaders'?你有没有试过创建一个最小化的测试用例来重现这个问题? –
Corona可能确实使用自定义'package.loaders'。 –
foo模块如何设置;它返回一个表或它使用模块()? 都不是,该模块只是执行一些代码 难道科罗纳使用自定义package.loaders? http://docs.coronalabs.com/api/library/package/loaders.html 你有没有尝试创建一种再现这个问题最小测试用例? 是 –