So lets say I have one server script, which accesses variables in one module script, lets call it module1.
Another module2 is inside module1, and when module1 gets told by the server to call a function, that information goes from module1 to module2 where the function is called.
The only problem is, that I can’t require module2 inside module1.
Are module scripts in general not able to require other module scripts?
You can require modulescripts from other modulescript but if you end up making 2 modulescripts require each other, it will enter an infinite require loop.
In addition to what @BenMactavsin said you can resolve circular dependencies by initializing one of the modules first, if not having to restructure your code entirely.
This code will hang when the initial require() call is made in the caller script:
-- ModuleScript workspace.ModuleScript1
local module2 = require(workspace.ModuleScript2)
local module1 = {}
module1.x = "module1 var"
function module1.f()
module2.p()
end
return module1
-- ModuleScript workspace.ModuleScript2
local module1 = require(workspace.ModuleScript1)
local module2 = {}
function module2.p()
print("hey from module 2")
print(module1.x)
end
return module2
-- Script workspace.Caller
local m = require(workspace.ModuleScript1)
m.f()
This, however, will run properly:
-- ModuleScript workspace.ModuleScript1
local module2
local module1 = {}
module1.x = "module1 var"
function module1.f()
module2.p()
end
function module1.init()
module2 = require(workspace.ModuleScript2)
end
return module1
-- ModuleScript workspace.ModuleScript2
local module1 = require(workspace.ModuleScript1)
local module2 = {}
function module2.p()
print("hey from module 2")
print(module1.x)
end
return module2
-- Script workspace.Caller
local m = require(workspace.ModuleScript1)
m.init()
m.f()
This essentially turns it into a linear dependency, since Module1 now already exists before Module2 is being required.