How to uninstall npm package?

后端 未结 6 671
深忆病人
深忆病人 2020-12-12 12:47

I\'ve installed grunt using sudo npm install grunt and now I can\'t remove it.

I\'ve tried:

$ sudo npm uninstall grunt


        
相关标签:
6条回答
  • 2020-12-12 13:24

    To uninstall a npm module from project node_modules folder, run:

    npm uninstall <module> --save

    Note that npm modules should be uninstalled from the same directory that contains the node_modules folder when running this command. The --save option will also remove it from your package.json

    One can also remove a local dependency/module installation, by deleting its directory from the local node_modules folder. Yes, it's safe to delete dependencies there.

    To uninstall a npm module that was installed globally, run:

    npm uninstall -g <module>

    It doesn't matter where you run this command from.

    To install a npm module, run: (only meant as reference)

    npm install <module>

    ...or:

    npm install (if there's a package.json file at the root of your project)

    ...or:

    npm install <module> --save-dev (if you want to add a minimum version to the dependency)

    Good things to know about Grunt:

    • If you have installed grunt stable before February 18, 2013 (the day grunt v0.4.x was released), you might have an older grunt version still lingering in your system. That's because grunt versions lower than 0.4.x were installed globally, which caused a lot of pain when upgrading/maintaining versions.
    • grunt and grunt-cli are two different things.

      • grunt (without the "cli") is usually installed at the project level (when listed as a devDependency in package.json) by running npm install. That's also known as a local installation.
      • grunt-cli is the underlying foundation on which local versions of grunt run in different projects/folders. It can be installed locally, but is more useful when installed globally, once.
    • grunt is only installed locally (by running npm install grunt).

    • grunt-cli is preferably installed globally (by running npm install -g grunt-cli). grunt-cli official npm page still warns against installing grunt (without the cli) globally.
    • If you want to uninstall the global installation of grunt-cli, run npm uninstall -g grunt-cli. This issue on gruntjs's project supports this procedure.
    • Never install grunt globally (by running npm install -g grunt).

    On npm and sudo

    sudo doesn't play well with npm. Only use it if you must. Below are two quotes on the advantages and disadvantages on its use:

    Quoting Isaac Z. Schlueter on his Introduction to npm article:

    I strongly encourage you not to do package management with sudo! Packages can run arbitrary scripts, which makes sudoing a package manager command as safe as a chainsaw haircut. Sure, it's fast and definitely going to cut through any obstacles, but you might actually want that obstacle to stay there.

    I recommend doing this once instead:

    sudo chown -R $USER /usr/local

    That sets your user account as the owner of the /usr/local directory, so that you can just issue normal commands in there. Then you won't ever have to use sudo when you install node or issue npm commands.

    It's much better this way. /usr/local is supposed to be the stuff you installed, after all.

    Yet another catch mentioned by Andrei Karpushonak:

    There are certain security concerns and functionality limitations regarding changing the ownership of /usr/local to the current user:

    • if there is another user on the machine who could use global npm packages - do not change the ownership of /usr/local
    • https://apple.stackexchange.com/questions/1393/are-my-permissions-for-usr-local-correct
    • https://askubuntu.com/questions/261326/is-it-safe-to-chown-usr-local

    Having said that, if you want to install global module without using sudo, I don't see any better solution (from pragmatic point of view) than mentioned. Security vs easy of use is very broad topic, and there is no easy answer for that - it just depends on your requirements.

    0 讨论(0)
  • 2020-12-12 13:25

    In some cases it may be necessary to use npm's "remove a package," feature.

    npm - Remove a package

    Description

    "This uninstalls a package, completely removing everything npm installed on its behalf."

    On your third code block, you posted this message:

    npm WARN uninstall not installed in /home/kuba/projects/node_modules: "grunt-cli"
    

    I've found that using the

    which grunt 
    

    or the

    whereis grunt 
    

    commands in the CLI/console provides an incomplete and confusing output.

    Both of these commands will return the path of the grunt-cli installation, but return this simply as grunt.

    Also using,

    which grunt-cli
    

    or the

    whereis grunt-cli
    

    fails to return any output to the CLI console. I believe that this is a namespace issue/feature with npm.

    I also had a situation where I was unable to uninstall the grunt-cli with npm's uninstall function as recommended by other contributors above.

    The only thing that worked for me was using the npm remove function with the program's full name as demonstrated below.

    npm rm -g grunt-cli
    

    This should return the following to your console.

    unbuild grunt-cli@#.##.#
    

    Good Luck!

    0 讨论(0)
  • 2020-12-12 13:32

    Use first this one

    which grunt-cli
    

    Or

    which grunt
    

    And this will show you the path to the module

    In my case it was in the /usr/local/bin/

    Once I got into the bin folder I just wrote

    sudo rm grunt
    

    And that was the end of it :)

    0 讨论(0)
  • 2020-12-12 13:33

    This same thing happened with me. On doing

    which grunt
    

    I got path /usr/local/bin/. There was a folder grunt inside this . But on running command (even from within the path /usr/local/bin/):

    sudo npm uninstall -g grunt
    

    Got the warning uninstall not installed

    Solution : turns out that I installed using command

    sudo npm install -g grunt-cli
    

    And while trying to remove was just typing grunt

    So once I run

    sudo npm unistall -g grunt-cli 
    

    grunt got removed.

    Although you have mention in question that you run

    sudo npm install grunt
    

    But still check if you are also doing the same mistake and run it with grunt-cli

    0 讨论(0)
  • 2020-12-12 13:44

    If it's installed globally add -g to uninstall and probably you will need sudo

    sudo npm uninstall -g grunt 
    
    0 讨论(0)
  • 2020-12-12 13:45

    Running the accepted solution's commands didn't work for me. Running which grunt would result in /usr/local/bin/grunt, but normal (or sudo) npm uninstall -g grunt-cli had no effect.

    This is the command that finally worked for me:

    sudo npm uninstall grunt-cli -g --prefix=/usr/local
    

    Thanks to gengxuelei on github for the solution!

    0 讨论(0)
提交回复
热议问题