Node: $PREFIX/lib/node is being ignored for require

Created on 7 Jan 2018  路  2Comments  路  Source: nodejs/node

According to documentation page, Node.js will search in the following locations:

  1. $HOME/.node_modules
  2. $HOME/.node_libraries
  3. $PREFIX/lib/node

When 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

Problem

Based on above, I believe node.js doesn't scan for modules in $PREFIX/lib/node folder.


Specs

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
module question

Most helpful comment

$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.

All 2 comments

$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.

Was this page helpful?
0 / 5 - 0 ratings