[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: require() relative to calling file
- From: Daurnimator <quae@...>
- Date: Sun, 5 Feb 2017 22:42:07 +1100
On 4 February 2017 at 20:23, Sean Conner <sean@conman.org> wrote:
> Where do you add the "application path"? Do you prepend it to
> package.path? Or append it to package.path?
You don't want to modify package.path for this type of functionality.
A key note is that the string you pass to the `require` function is
what the module is saved under in `package.loaded`.
It *has* to be something a function that wraps or re-implements
`require` itself.
Now I ask: why are we taking about this in relation to file systems?
package searchers can be abstract, and don't have to be bound by a
file system layout.
I think the only reasonable way to accomplish a 'relative require' is
to use the *current* module path as a prefix.
Assuming the current file was loaded with require, this can be done as
Soni notes: `require((...)..".mysubmodule")`
To make things neater, this can be made into a function with use of
the debug library:
function rr(str)
local info
local lvl = 3
while true do
info = debug.getinfo(lvl, "f")
if info == nil or info.func == require then
break
end
lvl = lvl + 1
end
if info then
local _, require_prefix = debug.getlocal(lvl-1, -1)
return require(require_prefix.."."..str)
else
return require(str)
end
end
Though I perhaps prefer the explicit-ness of
`require((...)..".mysubmodule")` itself.
================
Back when I was first starting with lua, I did find myself wanting
relative require.
However as time has gone on I wanted it less and less, and now don't
have any desire for it at all.
I think the main desire for a relative require was a reluctance to
name my projects while I was working on them.
If I had a sub-module 'foo' that relied on a sub-module "bar", I'd
have to name the whole project!
- References:
- require() relative to calling file, tobias
- Re: require() relative to calling file, Sean Conner
- Re: require() relative to calling file, Russell Haley
- Re: require() relative to calling file, Scott Morgan
- Re: require() relative to calling file, Russell Haley
- Re: require() relative to calling file, Sean Conner
- Re: require() relative to calling file, Russell Haley
- Re: require() relative to calling file, Sean Conner
- Re: require() relative to calling file, Russell Haley
- Re: require() relative to calling file, Sean Conner