According to documentation page, Node.js will search in the following locations:
$HOME/.node_modules$HOME/.node_libraries$PREFIX/lib/nodeWhen I've tested 3rd location, it doesn't work as expected:
$ npm install -g levelup
$ ln -vs "$(npm root -g)" "$(npm config get prefix)"/lib/node
'/usr/local/lib/node' -> '/usr/local/lib/node_modules'
$ ls "$(npm config get prefix)"/lib/node
Mist bower grunt-cli gulp-cli less levelup acorn fibers gulp iyql leveldown meteor-build-client node-inspector npm
$ echo 'require("levelup")' | node
Error: Cannot find module 'levelup'
It works only when going to that folder via:
$ cd "$(npm config get prefix)"/lib/node
$ echo 'require("levelup")' | node
However when I've tested the same way 1st location, it worked:
$ npm install -g levelup
$ ln -vs "$(npm root -g)" "$HOME"/.node_modules
'/Users/kenorb/.node_modules/node_modules' -> '/usr/local/lib/node_modules'
$ echo 'require("levelup")' | node
Based on above, I believe node.js doesn't scan for modules in $PREFIX/lib/node folder.
kenorb@MBP ~ $ node -v
v8.9.1
kenorb@MBP ~ $ uname -a
Darwin MBP.local 16.7.0 Darwin Kernel Version 16.7.0: Wed Oct 4 00:17:00 PDT 2017; root:xnu-3789.71.6~1/RELEASE_X86_64 x86_64 i386 MacBookPro11,3 Darwin
$PREFIX corresponds to ./configure --prefix=..., i.e., node -p process.config.variables.node_prefix, not npm config get prefix.
Put another way, node looks relative to process.execPath in ../lib/node on Unices and lib/node on Windows.
Answered, closing.
Most helpful comment
$PREFIXcorresponds to./configure --prefix=..., i.e.,node -p process.config.variables.node_prefix, notnpm config get prefix.Put another way, node looks relative to
process.execPathin../lib/nodeon Unices andlib/nodeon Windows.