A linker for lua code
lualink puts all your dependencies inside one file, so that you can embed it easily.
It just puts the content of your file as functions inside package.preload.
Let's say your lua program has two files: main.lua and its dependency foo.lua
-- main.lua
local foo = require "foo"
print "hello from main.lua"
foo.sayhello()
-- foo.lua
return {
sayhello= function() print("hello from dep.lua") end
}
Just link it :
$ ./lualink -mmain=main.lua -mfoo=foo.lua -o myapp.lua
Now all your dependencies are inside myapp.lua
$ rm main.lua dep.lua
$ lua myapp.lua
hello from main.lua
hello from dep.lua
As you can see, it just puts your files inline.
-- myapp.lua
package.preload['main'] = function()
local m = require "foo"
print "hello from main.lua"
foo.sayhello()
end
package.preload['foo'] = function()
return {
sayhello= function() print("hello from foo.lua") end
}
end
require('main')
So it's not perfect:
- You can't embed bytecode (but you can easily compile the file produced)
- It alterates debug informations
Pull requests are open !