Why does npm install local packages in my home dir

2020-07-24 03:17发布

Node.js newbie here, Windows 10. I npm install-ed some packages (without -g) while inside a directory that didn't have package.json. npm placed the packages in C:\Users\{MyName}\node_modules\.

Now I'm seeing some weird behavior:

  • When I'm in my project directory (has package.json but no node_modules/ yet), npm list and npm list -g both show an empty list
  • When I'm in a non-project directory (no package.json)...
    • npm list -g still shows an empty list
    • However, npm list shows everything in C:\Users\{MyName}\node_modules\

Question 1. What is going on here? Apparently, npm's default global path should be C:\Users\{MyName}\AppData\Roaming\npm\. If so, why is it using C:\Users\{MyName}\node_modules\?

Question 2. How do I get out of this mess? Node.js has no problem importing packages from C:\Users\{MyName}\node_modules\, but I want npm to list them properly. How can I delete the semi-global packages, reinstall them correctly, and ensure that this doesn't happen again?

标签: node.js npm
3条回答
聊天终结者
2楼-- · 2020-07-24 03:56

Ok, a couple of tips then...

when you install a package that you are going to use in production then add --save, e.g.

npm install --save some-package

this will automatically add the dependency to your package.json. If you are installing a package for use purely in development, e.g. chai, then use

--save-dev

and it will add it to the development dependencies.

Also, git is your friend, even if you are only messing :)

Happy noding :)

查看更多
地球回转人心会变
3楼-- · 2020-07-24 04:00

Not sure why it’s doing it, but the way to avoid it is to initialize your project directory using:

npm init

or if you don’t want to answer the questions:

npm init -y

That will setup the directory with the package.json and node_modules will be put there.

查看更多
时光不老,我们不散
4楼-- · 2020-07-24 04:19

Welp, turns out I've been mistakenly npm install-ing packages without package.json. The first time I did this, I was in my home directory(C:\Users\{MyName}\). This caused npm to create node_modules/ and package-lock.json in the home directory. Further (mistaken) attempts to install packages in my projects--which were still missing package.json--caused npm to traverse upwards, until it found the initial node_modules/ dir, and install everything there. Because my home directory is among the places Node.js looks for modules, I didn't notice my mistake until now. :P

查看更多
登录 后发表回答