Node.js 如何卸载package.json(NPM)中列出的所有依赖项?

Node.js 如何卸载package.json(NPM)中列出的所有依赖项?,node.js,npm,uninstallation,Node.js,Npm,Uninstallation,如果我在我的应用程序根目录中定义了一个package.json文件,并运行npm install-g,它将全局安装package.json中定义的所有依赖项 然而,这似乎并没有起到相反的作用 如果我在我的应用程序根目录中执行npm uninstall-g,它将抛出一个错误,并将我的程序包名传递给它 这难道不应该卸载我安装的相同软件包吗 我做错了什么吗?实际上,如果您想从包中卸载包,没有选择。json只需在包所依赖的同一目录下执行npm ls,并对要删除的包使用npm uninstall或npm

如果我在我的应用程序根目录中定义了一个package.json文件,并运行
npm install-g
,它将全局安装package.json中定义的所有依赖项

然而,这似乎并没有起到相反的作用

如果我在我的应用程序根目录中执行
npm uninstall-g
,它将抛出一个错误,并将我的程序包名传递给它

这难道不应该卸载我安装的相同软件包吗


我做错了什么吗?

实际上,如果您想从
包中卸载包,没有选择。json
只需在
包所依赖的同一目录下执行
npm ls
,并对要删除的包使用
npm uninstall
npm rm

如果使用Bash,只需切换到包含package.json文件的文件夹并运行以下操作:

for package in `ls node_modules`; do npm uninstall $package; done;
对于全局安装的软件包,请切换到
%appdata%/npm
文件夹(如果在Windows上)并运行相同的命令

编辑:此命令与npm 3.3.6(节点5.0)中断。我现在使用下面的Bash命令,我已将其映射到.bashrc文件中的npm\u uninstall\u all:

注意:它将从package.json和package-lock.json中删除所有依赖项列表,呈现
npm安装
无用,因为没有列出要安装的依赖项

额外奖金?快多了


对于windows,请转到node_modules dir并在powershell中运行此命令

npm uninstall (Get-ChildItem).Name 
这对我很有用:

命令提示符或gitbash插入项目中的node_modules文件夹,然后执行:

npm uninstall *

已删除该项目的所有本地包。

Windows用户提示:从
节点\u模块中运行此PowerShell命令。
父目录:

ls .\node_modules | % {npm uninstall $_}
这实际上创建了一个假的空package.json,调用
npm prune
删除节点模块中的所有内容,恢复原始package.json并重新安装所有内容


其他一些解决方案可能更优雅,但我怀疑这是更快和详尽的。在其他线程中,我看到有人建议只删除node_modules目录,但至少在windows中,这会导致npm随后阻塞,因为bin目录丢失。可能在linux上它得到了正确的恢复,但在windows上没有。

我最近发现一个node命令,允许卸载所有开发依赖项,如下所示:

npm prune --production

正如我提到的,这个命令只卸载开发依赖项包。至少它帮助我不用手动操作。

即使你不需要为此运行循环

只需使用一个命令即可删除所有节点_模块:-

npm uninstall `ls -1 node_modules | tr '/\n' ' '`
Powershell用户:
foreach($ls node_模块中的包){npm uninstall$package}

谢谢@JustMailer

  • 从包.json中删除不需要的依赖项
  • npm i
  • npm i
    ”不仅会安装缺失的DEP,还会更新节点单元以匹配包。json

    (在阅读所有内容之前不要复制这些步骤)

    对我来说,所有提到的解决方案都不起作用。所以我去了
    /usr/lib
    并在那里运行

    for package in `ls node_modules`; do sudo npm uninstall $package; done;
    
    但它也删除了
    npm
    包,并且只删除了一半包(直到到达字母n)

    因此,我尝试根据节点指南再次安装节点

    # Using Ubuntu
    curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
    sudo apt-get install -y nodejs
    
    但它没有再次安装
    npm

    所以我决定重新安装整个节点
    sudo apt get remove nodejs
    然后再次按照上面的指南进行安装

    现在NPM又开始工作了,但是全局模块仍然存在。因此,我检查了目录
    /usr/lib/node\u modules
    的内容,似乎这里唯一重要的是
    npm
    。因此,我编辑了上面的命令以卸载除npm之外的所有内容

    for package in $(ls node_modules); do if [ "$package" != "npm" ]; then sudo npm uninstall $package; fi; done;
    
    它删除了所有没有前缀的模块
    @
    。所以我扩展了子目录的循环

    for package in $(ls node_modules); do if [  ${package:0:1} = \@ ]; then 
            for innerPackage in $(ls node_modules/${package}); do
                    sudo npm uninstall "$package/$innerPackage";
            done;
    fi; done;
    
    我的
    /usr/lib/node_模块
    现在只包含
    npm
    和链接的包。

    单行版本:

    npm卸载'ls-1节点单元模块| grep-v^ | tr'/\n'''`查找节点单元单元/*-类型d-深度12>/dev/null | cut-d/-f2-3 | tr'\n''`
    
    多行版本:

    npm卸载\
    `ls-1节点| grep-v^@|tr'/\n''模块\
    `查找节点_modules/@*-type d-depth 12>/dev/null | cut-d/-f2-3 | tr'\n''`
    
    另一个简单的选项是删除node_modules和package-lock.json

    rm -rf node_modules
    rm -rf package-lock.json
    

    在此之后,您可以尝试重新安装npm包

    ,因为这仍然是Google搜索如何删除npm中的所有模块时的第一个结果,我想我应该为Powershell共享一个小脚本,以便通过npm删除所有依赖项:

    #Create a Packages Array to add package names to
    $Packages = New-Object System.Collections.ArrayList
    
    #Get all Production Dependencies by name
    (Get-Content .\Package.json | ConvertFrom-JSON).dependencies.psobject.properties.name |
    ForEach-Object { $Packages.Add($_) | Out-Null }
    
    #Get all Dev Dependencies by name
    (Get-Content .\Package.json | ConvertFrom-JSON).devDependencies.psobject.properties.name | 
    ForEach-Object { $Packages.Add($_) | Out-Null }
    
    #Remove each package individually
    Foreach($Package in ($Packages | select -unique))
    { npm uninstall $Package }
    
    #Clean up any remaining packages
    $Modules = Get-ChildItem "node_modules"
    if($Modules)
    { $Modules | ForEach-Object { Remove-Item ".\node_modules\$_" -Force -Recurse } }
    

    这将运行更具体的删除操作,而不是单独从节点模块中删除每个模块。

    首先,从
    package.json中的
    依赖项和
    devdependency中删除所有包

    其次,运行
    npm安装


    这很简单。

    仅供参考,我从不使用npm-g的理由。请记住,如果要为项目使用模块,必须在本地安装。全局安装模块只会在终端中提供更多的命令,例如expressjs和express(1)。@sgwilly必须全局使用node_模块是错误的,它甚至在文档中这样说--require()函数是“智能”的,因为它在不同的位置查找,以尝试解析包括全局节点_modules在内的模块的路径。我应该更具体一些:require()确实足够智能,可以找到全局安装的模块。如果您的所有项目都依赖于上述模块的同一版本,那么它将起作用。然而,如果您需要,您可能很难维护依赖于不同模块版本的项目
    rm -rf node_modules
    rm -rf package-lock.json
    
    #Create a Packages Array to add package names to
    $Packages = New-Object System.Collections.ArrayList
    
    #Get all Production Dependencies by name
    (Get-Content .\Package.json | ConvertFrom-JSON).dependencies.psobject.properties.name |
    ForEach-Object { $Packages.Add($_) | Out-Null }
    
    #Get all Dev Dependencies by name
    (Get-Content .\Package.json | ConvertFrom-JSON).devDependencies.psobject.properties.name | 
    ForEach-Object { $Packages.Add($_) | Out-Null }
    
    #Remove each package individually
    Foreach($Package in ($Packages | select -unique))
    { npm uninstall $Package }
    
    #Clean up any remaining packages
    $Modules = Get-ChildItem "node_modules"
    if($Modules)
    { $Modules | ForEach-Object { Remove-Item ".\node_modules\$_" -Force -Recurse } }