你如何卸载所有的凉亭包?
Posted
技术标签:
【中文标题】你如何卸载所有的凉亭包?【英文标题】:How do you uninstall all your bower packages? 【发布时间】:2014-05-20 13:53:15 【问题描述】:有时重建整个站点并强制 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) 一些项目已经从凉亭下线/移动了它的 github 页面
3) 某些项目 (>_> jquery) 在非主要版本修订中更改了文件的布局方式。
我意识到这个问题的“正确”解决方案是:修复 jenkins,以便它为每个构建创建一个新的临时目录。 ...但这不在我的控制范围内。
因此,作为构建步骤,我需要自动化一种方法来删除凉亭组件并强制重新安装它们;作为 grunt 任务(构建的一部分)或 jenkins 构建步骤。但是,请记住上面的(3),我们的项目使用 .bowerrc,所以它并不像简单地删除一个文件夹那么简单。
如果我可以卸载所有现有的 Bower 组件作为预构建步骤来完成这项工作,那就太好了。
所以...回到问题:这可以用 bower 完成吗?
【问题讨论】:
希望这会有所帮助:github.com/bower/bower/issues/240 【参考方案1】:更新答案
如果您尝试更新所有软件包,请使用
$ bower update
原答案
转到您的 bower.json 文件并删除您要从 devDependencies 中卸载的所有组件或库。
在你删除了你想删除的那些之后,执行 -
$ bower prune
以-开头
"devDependencies":
"angular": "~1.2.15",
"angular-ui-router": "~0.2.10",
"moment": "~2.5.1"
从文件中删除角度参考 -
"devDependencies":
"moment": "~2.5.1"
执行
$ bower prune
观察你的角度依赖被卸载
【讨论】:
这行得通,但我不想删除一个依赖项或一组依赖项;我想强制 bower 重新安装所有当前的软件包。 (例如“~1.x.x”,你想升级到当前修订集中的最新 jquery 并卸载以前的版本,以获得一大长包列表) 之后你可能还想bower cache clean
我同意@ebohlman,为什么不使用更新?也许我现在对您尝试做的事情感到困惑。如果您只是想更新已经声明的依赖项,为什么还要尝试卸载和 rm 目录?
@ebohlman bower 更新,即使使用 -f 也不会强制安装软件包。例如。 rm bower_components/momentjs/*;凉亭更新; ls bower_components/momentjs -> lang.我想强制重新安装所有软件包;这将有效地修复损坏的软件包/升级到最新版本。
我唯一能想到的就是删除依赖列表中的版本号,然后重新运行$bower install。示例 - "dependencies": "moment": "" 唯一的缺点是您不再知道版本号,如果这很重要的话。如果是,您可以运行 $ bower list ,它会为您提供所有版本,以便您输入它们。【参考方案2】:
怎么样
-
编辑 bower.json
'rm -Rf bower_components/*'
凉亭安装
我试图从 0.2.3 升级到聚合物 0.2.4。我似乎找不到卸载一组依赖项的快速方法。所以我只是手动删除了 bower_components 下的那些 polymer* 目录。但由于某种原因,bower 一直记得我有 0.2.3 安装的事件,并且修改了 bower.json。 'rm -Rf bower_component/*' 似乎可以解决问题。
【讨论】:
注意,根据问题,如果您使用 .bowerrc,这不是通用解决方案;虽然基本上这是正确的解决方案,但您只需在脚本中手动解析 .bowerrc 即可找出本地的“bower_components”文件夹是什么。【参考方案3】:实际上我做了一些有点棘手的事情,但它对我有用:
for package in $(ls your_bower_components_folder); do bower uninstall "$package"; done;
bower install
【讨论】:
【参考方案4】:卸载软件包
要删除一个包,您可以使用卸载命令,后跟要删除的包的名称。
凉亭卸载
可以通过列出包名称一次删除多个包。
bower 卸载 jquery modernizr sass-bootstrap
【讨论】:
是的,但是如果您阅读该问题,您会看到我正在尝试自动卸载软件包,而不是手动单独命名它们。我认为这个问题的真正答案基本上是;你不能。 @Doug “凉亭更新”选项有什么问题? 它不会重新安装没有被版本改变的现有包;即使本地副本已损坏。 (哈哈,你说,没有人会在不更改版本号的情况下随意使用它来破坏他们的凉亭包吗? .... :( ....) @Doug - 事实证明,原因是 Bower 不支持嵌套依赖项。如果您使用的包包含子依赖项,Bower 会将它们解析为一个平面依赖项列表,该列表必须满足所有子依赖项要求。如果 Bower 找不到满足所有条件的依赖版本,那么您就会遇到冲突,必须手动解决。 @Doug - 这篇文章可能对你有帮助 (gofore.com/ohjelmistokehitys/stop-using-bower)【参考方案5】:适配Jumar Polanco's answer在Powershell中使用,可以通过以下方式以编程方式卸载bower组件:
在 Powershell 界面中,导航到 bower.json 和 bower_components 文件夹所在的位置。通常是根应用文件夹。
然后就可以运行了:
foreach($package in ls bower_components)bower uninstall $package
根据包的依赖关系,可能需要特别注意该过程,因为可能会出现一些需要额外输入(Y/n)才能继续该过程的提示(例如依赖关系冲突)。
【讨论】:
这看起来很棒。由于某种原因,powershell 无法将 bower 识别为可执行文件。【参考方案6】:我不知道你使用什么构建工具,但如果它包含带有grunt-bowercopy 的 Grunt,你可以使用clean
选项。在复制出所需文件后,它会删除 bower_components 文件夹(或您配置使用的任何文件夹)。
理想情况下,我更喜欢不需要我在每次构建时重新下载所有依赖项的东西,而只是那些进行全新安装会找到更新版本的东西。
我也在寻找更好的解决方案,所以如果我找到了,我会更新。
【讨论】:
【参考方案7】:我一直在使用 nombom
来执行此操作(作为奖励,它还会从头开始重新安装您的 npm 包):
https://www.npmjs.com/package/nombom
【讨论】:
【参考方案8】:这就是最终通过 Windows cmd 提示为我工作的方法:
forfiles /p .\bower_components /c "cmd /c cd .. && bower uninstall @fname"
【讨论】:
以上是关于你如何卸载所有的凉亭包?的主要内容,如果未能解决你的问题,请参考以下文章
卸载包时如何在 pipenv 中自动删除依赖的 Python 包?