resolve
resolve copied to clipboard
Does the require.resolve `paths` option work just like the `baseDir` option?
Since Node.js v8.9.0, a new paths option was made available to the core Node.js require.resolve function:
paths<string[]>Paths to resolve module location from. If present, these paths are used instead of the default resolution paths, with the exception ofGLOBAL_FOLDERSlike$HOME/.node_modules, which are always included. Note that each of these paths is used as a starting point for the module resolution algorithm, meaning that thenode_moduleshierarchy is checked from this location.
As far as I can see, if just given a single element in the paths array, this works identical to the baseDir option of this module. The new paths features does however take into account the GLOBAL_FOLDERS, which I'm not sure if this module does?
I ask because I would like to feature detect this and use the internal Node.js function if available, but fall back to this module if not. But I wasn't sure if the behavior was 100% identical 🤔
Since it's relatively new, this package hasn't adapted to it yet, no.
Would you be willing to make a PR with test cases, comparing require.resolve's paths option to the basedir option?
Another possibility might be, adding a paths option to resolve itself.
(do you need the GLOBAL_FOLDERS? requiring things from there is widely considered an antipattern)
I don't mind taking a stab at it.
I don't personally use GLOBAL_FOLDERS no, but I'm the maintainer of a popular module which is used to patch the require function where I depend on being able to resolve modules. And I can't rule out if any of their apps depend on the GLOBAL_FOLDERS environment variable unfortunately.
I somehow can't get the normal test suite to run in master. Is it because I have cloned this repo into a folder whos path already contain a node_modules folder? Usually that's where I keep my all the Node modules I'm working on which makes working on multiple modules with inter-dependencies much easier.

Installed in /tmp and it worked. So I guess it's related to the node_modules folder in the path
As far as I can see, no where in the current tests do you validate that require.sync returns the same result as require.resolve. Is this on purpose?
Not that I know of; I've always found that a bit confusing but haven't taken the time to fix it.
It sounds like there's a few action items here:
- file an issue about the repo not working properly with a sibling
node_modules(if i've understood the problem correctly) - make a PR that adds a test suite comparing both
resolveandresolve.syncwithrequire.resolve, to ensure consistency and/or illustrate the differences - make a PR for adding the
pathsoption
Thoughts?
resolve definitely does not mimic require.resolve behavior in terms of paths option. In require.resolve it works as multiple basedir. But also require includes there dirs from NODE_PATH which is rarely desired behavior.
@watson are you interested in doing any of the steps I outlined above?
I've added bullet point 2 in 067db38.
If you could give me some examples of test cases for paths with more than one item, i can look into supporting it in resolve.