I am trying to setup Node on Mac OSX Lion. It all seems to work ok, but I can't seem to import anything modules from my global modules folder. I get the error,
Error: Cannot find module <module>
If I run this: node -e require.paths
, the response I get is:
[ '/usr/local/lib/node_modules',
'/Users/Me/.node_modules',
'/Users/Me/.node_libraries',
'/usr/local/Cellar/node/0.4.12/lib/node' ]
Which is correct, my modules are indeed installed in /usr/local/lib/node_modules. When I try and run a script, however, I am getting this:
Error: Cannot find module 'socket.io'
at Function._resolveFilename (module.js:326:11)
at Function._load (module.js:271:25)
at require (module.js:355:19)
at Object.<anonymous> (/Users/Me/node/server.js:2:10)
at Module._compile (module.js:411:26)
at Object..js (module.js:417:10)
at Module.load (module.js:343:31)
at Function._load (module.js:302:12)
at Array.<anonymous> (module.js:430:10)
at EventEmitter._tickCallback (node.js:126:26)
My .bash_profile looks like this:
export PATH=/usr/local/mysql/bin:$PATH
export NODE_PATH=/usr/local/lib/node_modules
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/"
Would really appreciate some help, I have no idea why I can't import any libraries.
Node.js uses the environmental variable
NODE_PATH
to allow for specifying additional directories to include in the module search path. You can usenpm
itself to tell you where global modules are stored with thenpm root -g
command. So putting those two together, you can make sure global modules are included in your search path with the following command (on Linux-ish)export NODE_PATH=$(npm root --quiet -g)
Setting the environment variable NODE_PATH to point to your global
node_modules
folder.In Windows 7 or higher the path is something like
%AppData%\npm\node_modules
while in UNIX could be something like/home/sg/.npm_global/lib/node_modules/
but it depends on user configuration.The command
npm config get prefix
could help finding out which is the correct path.In UNIX systems you can accomplish it with the following command:
I am using Docker. I am trying to create a docker image that has all of my node dependencies installed, but can use my local app directory at container run time (without polluting it with a node_modules directory or link). This causes problems in this scenario. My workaround is to require from the exact path where the module, e.g. require('/usr/local/lib/node_modules/socket.io')
require.paths
is deprecated.Go to your project folder and type
that should install it in the local ./node_modules folder where node will look for it.
I keep my things like this:
Create an app.js file
now run my app
Make sure you're using
npm >= 1.0
andnode >= 4.0
.If you're using npm >=1.0, you can use
npm link <global-package>
to create a local link to a package already installed globally. (Caveat: The OS must support symlinks.)However, this doesn't come without its problems.
As an alternative, you can install the packages locally as well as globally.
For additional information, see
You can use npm link to create a symbolic link to your global package in your projects folder.
Example:
All it does is create a local node_modules folder and then create a symlink express -> [global directory]/node_modules/express which can then be resolved by
require('express')