Search code examples
angularjsnode.jsnpmnpm-installangularjs-material

How do I fix the npm UNMET PEER DEPENDENCY warning?


I'm on Windows 10, with Node 5.6.0 and npm 3.6.0. I'm trying to install angular-material and mdi into my working folder. npm install angular-material mdi errors with:

+-- [email protected]

+-- UNMET PEER DEPENDENCY angular-animate@^1.5.0

+-- UNMET PEER DEPENDENCY angular-aria@^1.5.0

+-- [email protected]

+-- UNMET PEER DEPENDENCY angular-messages@^1.5.0 `-- [email protected]

npm WARN enoent ENOENT: no such file or directory, open
'C:\Users\xxxxx\Desktop\ngClassifieds\package.json' 

npm WARN [email protected] requires a peer of
angular-animate@^1.5.0 but none was installed. 

npm WARN [email protected] requires a peer of angular-aria@^1.5.0
but none was installed. 

npm WARN [email protected] requires a peer of
angular-messages@^1.5.0 but none was installed.

How do I resolve this to get AngularJS Material and MDI installed?


Solution

  • EDIT 2020

    From npm v7.0.0, npm automatically installs peer dependencies. It is one of the reasons to upgrade to v7.

    https://github.blog/2020-10-13-presenting-v7-0-0-of-the-npm-cli/

    Also this page explains the rationale of peer dependencies very well. https://github.com/npm/rfcs/blob/latest/implemented/0025-install-peer-deps.md


    This answer doesn’t apply all cases, but if you can’t solve the error by simply typing npm install , this steps might help.

    Let`s say you got this error.

    UNMET PEER DEPENDENCY [email protected]
    
    npm WARN [email protected] requires a peer of packageA@^3.1.0 but none was installed.
    

    This means you installed version 4.2.0 of packageA, but [email protected] needs version 3.x.x of pakageA. (explanation of ^)

    So you can resolve this error by downgrading packageA to 3.x.x, but usually you don`t want to downgrade the package.
    Good news is that in some cases, packageB is just not keeping up with packageA and maintainer of packageB is trying hard to raise the peer dependency of packageA to 4.x.x.
    In that case, you can check if there is a higher version of packageB that requires version 4.2.0 of packageA in the npm or github.

    For example, Go to release pageenter image description here

    Oftentimes you can find breaking change about dependency like this.

    packageB v4.0.0-beta.0
    
    BREAKING CHANGE
    package: requires packageA >= v4.0.0
    

    If you don’t find anything on release page, go to issue page and search issue by keyword like peer. You may find useful information.

    enter image description here

    At this point, you have two options.

    1. Upgrade to the version you want
    2. Leave error for the time being, wait until stable version is released.

    If you choose option1:
    In many cases, the version does not have latest tag thus not stable. So you have to check what has changed in this update and make sure anything won`t break.

    If you choose option2:
    If upgrade of pakageA from version 3 to 4 is trivial, or if maintainer of pakageB didn’t test version 4 of pakageA yet but says it should be no problem, you may consider leaving the error.

    In both case, it is best to thoroughly test if it does not break anything.

    Lastly, if you wanna know why you have to manually do such a thing, this link explains well.