如何卸载所有的Bower包?

68

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

然而,似乎没有任何方法可以实现这一点:

尝试 #1:

$ bower uninstall
bower not-installed 0

不行,这只能针对每个包进行操作,即使干净的“bower install”使用了bower.json。

第二次尝试:

$ 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 目录在那里,并且它充满了各种组件的缓存副本。

下面是需要重新运行 bower 安装的一些例子:

1)某个白痴(>_> fitvids)删除了项目的先前标记的发布版本。

2)某个项目已经从 bower 中清除/移动了它的 github 页面

3)某个项目(>_> jquery)已经在非主要版本修订中改变了文件布局方式。

我意识到解决这个问题的“正确”方法是:修复 jenkins,使其为每个构建创建一个新的临时目录。......但这不在我的控制范围内。

因此,作为一个构建步骤,我需要自动化一种删除 bower 组件并强制重新安装它们的方式;无论是作为 grunt 任务(构建的一部分)还是作为 jenkins 构建步骤。然而,请记住上面提到的(3),我们的项目使用 .bowerrc,因此这并不像简单地删除一个文件夹那样简单。

如果我能卸载所有现有的 bower 组件作为预构建步骤来实现这个目标,那将是很好的。

那么...回到问题:这可以用 bower 完成吗?


希望这可以帮到你:github.com/bower/bower/issues/240 - Maverick
8个回答

147

更新回答

如果你想要更新所有的软件包,可以使用以下命令:

$ bower update

最初的回答

打开你的bower.json文件,从devDependencies中删除所有你想卸载的组件或库。

删除完毕后,执行以下命令-

$ bower prune
  1. start with -

    "devDependencies": {
        "angular": "~1.2.15",
        "angular-ui-router": "~0.2.10",
        "moment": "~2.5.1"
    }
    
  2. remove angular references from file -

    "devDependencies": {
        "moment": "~2.5.1"
    }
    
  3. execute

    $ bower prune
    
  4. watch your angular dependencies get uninstalled


1
这个方法可以实现,但我并不想移除某个依赖项或一组依赖项;我想强制 bower 重新安装所有当前的包。(例如,如果你想将“~1.x.x”升级到当前版本集中的最新jquery,并卸载先前的版本,对于一个很长的包列表) - Doug
你可能还想在此之后运行 bower cache clean - Eliran Malka
我同意@ebohlman的观点,为什么不使用update呢?也许我现在对你尝试做什么有些困惑。如果你只是想更新已经声明的依赖关系,为什么要尝试卸载和删除一个目录呢? - VtoCorleone
我能想到的唯一方法就是在依赖列表中删除版本号,然后重新运行 $bower install。例如 - "dependencies":{ "moment": ""} 唯一的缺点是如果版本号很重要,你将不再知道它。如果确实很重要,你可以运行 $ bower list,它会给出所有版本,这样你就可以输入它们了。 - VtoCorleone
每个 bower 模块都安装在 bower_components/ 目录中。如果(就像你说的那样)你能够运行一个脚本,为什么不直接 rm -rf bower_components 然后运行 bower i 呢?对于 npm 来说也是一样的,你没有全局卸载功能,因为只需要删除一个目录即可。 - Leiko
显示剩余5条评论

11

如何操作:

  1. 编辑bower.json文件
  2. 'rm -Rf bower_components/*'删除bower_components目录下的所有文件
  3. 运行命令bower install安装最新版本的polymer库

我试图将Polymer 0.2.4从0.2.3升级。我发现没有一种简单的方法可以卸载一组依赖项,所以我手动删除了bower_components下的那些polymer*目录。但由于某种原因,尽管我修改了bower.json文件,Bower仍然记得我安装了0.2.3版本。使用 'rm -Rf bower_component/*' 命令可以解决这个问题。


请注意,根据问题,如果您使用.bowerrc,则这不是通用解决方案;虽然基本上它是正确的解决方案,但您只需在脚本中手动解析.bowerrc以找出本地“bower_components”文件夹即可。 - Doug

6

实际上,我做了一些有点棘手的事情,但这对我有效:

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

5

卸载包

要删除某个包,您可以使用卸载命令,后面跟着您希望删除的包的名称。

bower uninstall

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

bower uninstall jquery modernizr sass-bootstrap


是的,但如果你仔细阅读问题,你会发现我试图自动卸载软件包,而不需要手动逐个命名它们。我认为这个问题的真正答案基本上是:你不能。 - Doug
@Doug 请问 "bower update" 选项出了什么问题吗? - Nuno Sarmento
它不会重新安装那些版本没有改变的现有软件包,即使本地副本已经损坏。(哈哈,你说呢,没有人会在不更改版本号的情况下随意搞乱他们的 bower 软件包,对吧?... :( ....) - Doug
@Doug - 事实证明,Bower不支持嵌套依赖项。如果您使用的软件包包含子依赖项,则Bower将它们解析为平面依赖项列表,该列表必须满足所有子依赖项的要求。如果Bower找不到满足所有条件的依赖版本,则会发生冲突,您必须手动解决它。 - Nuno Sarmento
@Doug - 这篇文章可能会对你有所帮助(https://gofore.com/ohjelmistokehitys/stop-using-bower/) - Nuno Sarmento

0

Jumar Polanco's answer适应于Powershell,可以通过编程方式以以下方式卸载bower组件:

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

然后可以运行:

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

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


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

0

我不知道你使用的构建工具是什么,但如果它包括 grunt-bowercopy,你可以使用 clean 选项。它会在复制所需文件后删除 bower_components 文件夹(或任何你配置的文件夹)。

理想情况下,我希望有一种方法不需要我在每次构建时重新下载所有依赖项,而只是在进行新安装时找到更新版本的依赖项。

我也在寻找更好的解决方案,如果我找到了,我会更新的。


0

0

以下是在 Windows 命令提示符中适用于我的方法:

forfiles /p .\bower_components /c "cmd /c cd .. && bower uninstall @fname"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接