I tried to do the following (per instructions from official site):
mkdir hapi && cd hapi
npm init
npm install hapi --save
But this gives me an error like this:
npm WARN install Refusing to install hapi as a dependency of itself
Now, I made a new test folder called hapiTest
and repeated the commands and then everything worked fine.
I tried the same process with a folder gulp
and npm install gulp --save
, and got the same error, so my conclusion is that I can't have the name of the folder be the same as the package that I want to install, but can someone back this statement up with some official documentation?
Reason Module name is same with library name
Solution
This was my initial code
which threw error
then i renamed the name from react to react_app and my code looks like
then it worked
The name of your module is same as the module you are trying to install. NPM thinks that you are installing the module to itself. Change the name of your module and it will install perfectly.
The issue can be simply explained as follows the name of your package or module in
package.json
cannot be same as that of the package or module you are trying to install.Here
hapi
is the name of your module and you are trying to install a module with namehapi
withnpm install hapi --save
When you did the command
npm init
, there were probably some relevant questions you needed to answer. Specifically, the name of your module. When you usenpm init
, it assumes you want the name of the module you're creating to be called the name of the folder it is in.So it's not the name of the folder that is stopping you from installing the dependency, it is the name of the npm module that you are creating.
Open the resulting
package.json
within yourhapi
directory, and rename the module to something other thanhapi
. Here's an example 'package.json' that works, even when residing in a folder called hapi:Added Note
I've not been able to find any documentation thus-far explaining this phenomena in the context of npm; though it is a bit of a no-brainer. Requiring modules with the same name within the same application would conflict with the CommonJS philosophy.