Can someone tell me where can I find the Node.js modules, which I installed using npm
?
23 Answers
Global libraries
You can run npm list -g
to see which global libraries are installed and where they're located. Use npm list -g | head -1
for truncated output showing just the path. If you want to display only main packages not its sub-packages which installs along with it - you can use - npm list --depth=0
which will show all packages and for getting only globally installed packages, just add -g i.e. npm list -g --depth=0
.
On Unix systems they are normally placed in /usr/local/lib/node
or /usr/local/lib/node_modules
when installed globally. If you set the NODE_PATH
environment variable to this path, the modules can be found by node.
Windows XP - %USERPROFILE%\AppData\npm\node_modules
Windows 7, 8 and 10 - %USERPROFILE%\AppData\Roaming\npm\node_modules
Non-global libraries
Non-global libraries are installed the node_modules
sub folder in the folder you are currently in.
You can run npm list
to see the installed non-global libraries for your current location.
When installing use -g option to install globally
npm install -g pm2
- pm2 will be installed globally. It will then typically be found in /usr/local/lib/node_modules
(Use npm root -g
to check where.)
npm install pm2
- pm2 will be installed locally. It will then typically be found in the local directory in /node_modules
The command npm root
will tell you the effective installation directory of your npm packages.
If your current working directory is a node package or a sub-directory of a node package, npm root
will tell you the local installation directory. npm root -g
will show the global installation root regardless of current working directory.
Example:
$ npm root -g
/usr/local/lib/node_modules
For globally-installed modules:
The other answers give you platform-specific responses, but a generic one is this:
When you install global module with npm install -g something
, npm looks up a config variable prefix
to know where to install the module.
You can get that value by running npm config get prefix
To display all the global modules available in that folder use npm ls -g --depth 0
(depth 0
to not display their dependencies).
If you want to change the global modules path, use npm config edit
and put prefix = /my/npm/global/modules/prefix
in the file or use npm config set prefix /my/npm/global/modules/prefix
.
When you use some tools like nodist, they change the platform-default installation path of global npm modules.
In earlier versions of NPM modules were always placed in /usr/local/lib/node or wherever you specified the npm root within the .npmrc file. However, in NPM 1.0+ modules are installed in two places. You can have modules installed local to your application in /.node_modules or you can have them installed globally which will use the above.
More information can be found at https://github.com/isaacs/npm/blob/master/doc/install.md
Not direct answer but may help ....
The npm also has a cache folder, which can be found by running npm config get cache
(%AppData%/npm-cache
on Windows).
The npm modules are first downloaded here and then copied to npm global folder (%AppData%/Roaming/npm
on Windows) or project specific folder (your-project/node_modules
).
So if you want to track npm packages, and some how, the list of all downloaded npm packages (if the npm cache is not cleaned) have a look at this folder. The folder structure is as {cache}/{name}/{version}
This may help also https://docs.npmjs.com/cli/cache
I was beginning to go mad while searching for the real configuration, so here is the list of all configuration files on linux:
- /etc/npmrc
- /home/youruser/.npmrc
- /root/.npmrc
- ./.npmrc in the current directory next to package.json file (thanks to @CyrillePontvieux)
on windows:
- c/Program\ Files/nodejs/node_modules/npm/npmrc
Then in this file the prefix is configured:
prefix=/usr
The prefix is defaulted to /usr in linux, to ${APPDATA}\npm in windows
The node modules are under $prefix tree, and the path should contain $prefix/bin
There may be a problem :
- When you install globally, you use "sudo su" then the
/root/.npmrc
may be used! - When you use locally without sudo: for your user its the
/home/youruser/.npmrc
. - When your path doesn't represent your prefix
- When you use
npm set -g prefix /usr
it sets the /etc/npmrc global, but doesn't override the local
Here is all the informations that were missing to find what is configured where. Hope I have been exhaustive.
From the docs:
In npm 1.0, there are two ways to install things:
globally —- This drops modules in
{prefix}/lib/node_modules
, and puts executable files in{prefix}/bin
, where{prefix}
is usually something like/usr/local
. It also installs man pages in{prefix}/share/man
, if they’re supplied.locally —- This installs your package in the current working directory. Node modules go in
./node_modules
, executables go in./node_modules/.bin/
, and man pages aren’t installed at all.
You can get your {prefix}
with npm config get prefix
. (Useful when you installed node with nvm).
Windows 10: When I ran npm prefix -g
, I noticed that the install location was inside of the git shell's path that I used to install. Even when that location was added to the path, the command from the globally installed package would not be recognized. Fixed by:
- running
npm config edit
- changing the prefix to 'C:\Users\username\AppData\Roaming\npm'
- adding that path to the system path variable
- reinstalling the package with -g.
From the docs:
Packages are dropped into the node_modules folder under the prefix. When installing locally, this means that you can require("packagename") to load its main module, or require("packagename/lib/path/to/sub/module") to load other modules.
Global installs on Unix systems go to {prefix}/lib/node_modules. Global installs on Windows go to {prefix}/node_modules (that is, no lib folder.)
Scoped packages are installed the same way, except they are grouped together in a sub-folder of the relevant node_modules folder with the name of that scope prefix by the @ symbol, e.g. npm install @myorg/package would place the package in {prefix}/node_modules/@myorg/package. See scope for more details.
If you wish to require() a package, then install it locally.
You can get your {prefix}
with npm config get prefix
. (Useful when you installed node with nvm).
As the other answers say, the best way is to do
npm list -g
However, if you have a large number of npm
packages installed, the output of this command could be very long and a big pain to scroll up (sometimes it's not even possible to scroll that far back).
In this case, pipe the output to the more
program, like this
npm list -g | more
Echo the config:
npm config ls
ornpm config list
Show all the config settings:
npm config ls -l
ornpm config ls --json
Print the effective node_modules folder:
npm root
ornpm root -g
Print the local prefix:
npm prefix
ornpm prefix -g
(This is the closest parent directory to contain a package.json file or node_modules directory)
Windows 7, 8 and 10 - %USERPROFILE%\AppData\Roaming\npm\node_modules.
Note : If you are somewhere in folder type cd ..
until you are in C:
directory. Then, type cd %USERPROFILE%\AppData\Roaming\npm\node_modules
. And, magically %USERPROFILE%
will change into Users\YourUserProfile\
. I just wanted to clarify on ideas referred by Decko
in first response. npm list -g
will list all the bits you got globally installed. If you need to find your project related npm package
then cd 'your angular project xyz'
, then run npm list
. It will show list of modules in npm package
. It will also give you list of dependencies
missing, and you may require to effectively run that project.
If you're trying to access your global dir from code, you can backtrack from process.execPath
. For example, to find wsproxy
, which is in {NODE_GLOBAL_DIR}/bin/wsproxy
, you can just:
path.join(path.dirname(process.execPath), 'wsproxy')
There's also how the npm
cli works @ ec9fcc1
/lib/npm.js#L254 with:
path.resolve(process.execPath, '..', '..')
See also ec9fcc1
/lib/install.js#L521:
var globalPackage = path.resolve(npm.globalPrefix,
'lib', 'node_modules', moduleName(pkg))
Where globalPrefix
has a default set in ec9fcc1
/lib/config/defaults.js#L92-L105 of:
if (process.env.PREFIX) {
globalPrefix = process.env.PREFIX
} else if (process.platform === 'win32') {
// c:\node\node.exe --> prefix=c:\node\
globalPrefix = path.dirname(process.execPath)
} else {
// /usr/local/bin/node --> prefix=/usr/local
globalPrefix = path.dirname(path.dirname(process.execPath))
// destdir only is respected on Unix
if (process.env.DESTDIR) {
globalPrefix = path.join(process.env.DESTDIR, globalPrefix)
}
}
If you have Visual Studio installed, you will find it comes with its own copy of node separate from the one that is on the path when you installed node yourself - Mine is in C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VisualStudio\NodeJs.
If you run the npm command from inside this directory you will find out which node modules are installed inside visual studio.
$HOME/.npm-global/lib/node_modules
– Synxmax-g
option will install a module to you working directory e.g. if you make a directory say~/Desktop/tmp
thencd ~/Desktop/tmp
then donpm install appium
then dols
you will seenode_modules package-lock.json
because you have installed a node moduleappium
to yourworking directory
... super confusing because-g
should essentially be thedefault
but is not. – the_prolenpm config get prefix
(stackoverflow.com/a/32159233/2361131) – gawkface