有时候重新构建整个站点并强制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 完成吗?