Re: require() relative to calling file
[
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