如何卸载所有Bower软件包?


69

有时重建整个站点并强制Bower重新安装bower.json中所有软件包的新版本很有用。

但是,似乎没有任何方法可以做到这一点:

尝试1:

$ bower uninstall
bower not-installed 0

不,即使干净的“ bower安装”使用bower.json,它也只能在逐个软件包的基础上工作。

尝试2:

$ bower install -f -l 0
$

不,尽管有“ -f”,但如果满足依赖项,则绝对不会执行任何操作。

尝试3:

$ rm -r bower_components
$

!胜利啊!...等等,这是什么?

rm: bower_components: No such file or directory

哦,该死的,这个项目中有一个.bowrc,用于设置安装目录。

我当前的糟糕解决方案:

运行以下自定义脚本:

- Parse .bowerrc if one exists
- Load the directory if one is specified in the json block
- If the directory currently exists...
- ...recursively delete the directory.

我想它可以工作,但是必须重复设置很烦人。

我想念什么吗?

不仅有简单的bower命令来删除本地安装的模块吗?

似乎真正的基本功能,我希望可以卸载Bower。

(这实际上不是一个非常JavaScript的问题,但是我会很高兴地接受某种挂钩到Bower模块中的东西,以某种方式使其在简单的节点脚本中发生)

语境

编辑:如果您想为这样的任务提供动力,那就是:我们有一个jenkins服务器来构建我们的项目并运行测试。但是,定期失败没有明显原因。调查,几乎总是这样,因为jenkins在构建和运行测试之前仅使用git-pull使用存储库的先前副本来更新到最新版本。结果,先前的bower_components目录在那里,并且充满了各个组件的缓存副本。

以下是一些示例,这些示例是#@ $ @#$'d,并且需要bower作为强制安装再次运行:

1)一些白痴(> _> fitvids)删除项目的先前标记版本。

2)一些项目脱离了Bower /移动了github页面

3)某些项目(> _> jquery)更改了在非主要版本修订版中文件布局的方式。

我意识到,此问题的“正确”解决方案是:修复jenkins,以便为每个版本创建一个新的临时目录。...但是那不是我的控制。

因此,作为构建步骤,我需要自动化一种删除Bower组件并将其全部重新安装的方法。作为艰巨的任务(构建的一部分)或詹金斯构建步骤。但是,请记住上面的(3),我们的项目使用.bowerrc,因此它并不像简单地删除文件夹那样简单。

如果我可以卸载所有现有的Bower组件作为完成此工作的预构建步骤,那就太好了。

所以...回到问题:凉亭可以做到吗?


希望这对您有所帮助:github.com/bower/bower/issues/240
Maverick

Answers:


148

更新的答案

如果您尝试更新所有软件包,请使用

$ bower update

原始答案

转到您的bower.json文件,并从devDependencies中删除要卸载的所有组件或库。

删除您要删除的内容后,执行-

$ bower prune
  1. 从...开始 -

    "devDependencies": {
        "angular": "~1.2.15",
        "angular-ui-router": "~0.2.10",
        "moment": "~2.5.1"
    }
    
  2. 从文件中删除角度参考-

    "devDependencies": {
        "moment": "~2.5.1"
    }
    
  3. 执行

    $ bower prune
    
  4. 观看您的角度依赖关系被卸载


1
这行得通,但是我没有尝试删除一个依赖项或一组依赖项;我想强制Bower重新安装所有当前软件包。(例如,“〜1.xx”,并且您想升级到当前修订版中的最新jquery并卸载以前的版本,以获得一长串的软件包)
Doug 2014年

您可能还想bower cache clean之后
Eliran Malka

我同意@ebohlman,为什么不使用update?也许我现在对您正在尝试做的事情感到困惑。如果您只是想更新已经声明的依赖项,为什么还要尝试卸载并管理目录?
VtoCorleone 2014年

@ebohlman bower更新,即使使用-f也不会强制安装软件包。例如。rm bower_components / momentjs / *; 凉亭更新; ls bower_components / momentjs-> lang。我想强制所有软件包重新安装;这样可以有效修复损坏的软件包/升级到最新版本。
Doug

我唯一能想到的就是删除依赖列表中的版本号,然后重新运行$ bower安装。示例-“ dependencies”:{“ moment”:“”}唯一的缺点是,如果这很重要,则您不再知道版本号。如果是这样,您可以运行$ bower list,它将提供所有版本,因此您可以输入它们。
VtoCorleone 2014年

11

怎么样

  1. 编辑bower.json
  2. 'rm -Rf bower_components / *'
  3. 凉亭安装

我正尝试从0.2.3升级到聚合物0.2.4。我似乎找不到快速的方法来卸载一组依赖项。因此,我只是手动删除了bower_components下的聚合物目录。但是出于某种原因,bower一直记得我修改了bower.json的0.2.3安装事件。'rm -Rf bower_component / *'似乎可以解决问题。


注意,根据问题,如果使用.bowerrc,则不是通用解决方案;尽管从根本上来说这是正确的解决方案,但是您只需要在脚本中手动解析.bowerrc即可找出本地的“ bower_components”文件夹。
道格2014年

6

实际上,我的操作有些棘手,但对我有用:

  1. for package in $(ls your_bower_components_folder); do bower uninstall "$package"; done;
  2. bower install

5

卸载软件包

要删除软件包,可以使用uninstall命令,后跟要删除的软件包的名称。

凉亭卸载

通过列出软件包名称可以一次删除多个软件包。

Bower卸载jQuery modernizr sass-bootstrap


是的,但是如果您阅读了该问题,将会看到我正在尝试自动卸载软件包,而无需手工分别命名它们。我认为这个问题的真正答案基本上是;你不能。
2015年

@Doug“ bower update”选项出了什么问题?
Nuno Sarmento 2015年

它不会重新安装版本未更改的现有软件包。即使本地副本已损坏。(哈哈,您说,没有人会在没有更改某些版本号的情况下,通过拧开它的包装来破坏其Bower包吗?.... :( ....)
Doug

@Doug-事实证明,原因是Bower不支持嵌套依赖项。如果您使用的程序包包含子依赖关系,Bower会将其解析为一个平坦的依赖关系列表,该列表必须满足所有子依赖关系要求。如果Bower找不到满足所有条件的依赖项版本,那么您将遇到冲突,必须手动解决。
Nuno Sarmento 2015年

@Doug -这篇文章可以帮助你(gofore.com/ohjelmistokehitys/stop-using-bower
努诺·萨尔门托

0

适应Jumar Polanco的答案以在Powershell中使用它,可以通过以下方式以编程方式卸载Bower组件:

在Powershell界面中,导航到bower.json和bower_components文件夹所在的位置。通常是根应用程序文件夹。

然后,您可以运行:

foreach($package in ls bower_components){bower uninstall $package}

根据软件包依赖项的不同,可能需要特别注意该过程,因为可能会出现一些提示,要求额外输入(Y / n)才能继续该过程(例如,依赖项冲突)。


看起来很棒 由于某种原因,PowerShell无法将Bower识别为可执行文件。
GaTechThomas

0

我不知道您使用什么构建工具,但是如果其中包括Grunt和grunt-bowercopy,则可以使用该clean选项。复制出所需的文件后,它将删除bower_components文件夹(或您配置为使用的任何文件夹)。

理想情况下,我更喜欢不需要我重新下载每个构建版本的所有依赖项的内容,而只是那些需要重新安装才能找到较新版本的依赖项。

我也在寻找一种更好的解决方案,因此,如果有发现,我会进行更新。



0

这就是通过Windows cmd提示符最终为我工作的原因:

forfiles /p .\bower_components /c "cmd /c cd .. && bower uninstall @fname"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.