"bower_components"应该被添加到Git的忽略列表中吗?

158

只保留 bower.json 文件并将整个 bower_components 目录添加到 .gitignore 文件,这是否是一个好的做法?


我刚刚注意到Symfony官方食谱,它实际上回答了这个确切的问题,引用“目前,您应该提交由Bower下载的资产,而不是将目录添加到您的.gitignore文件中”。 - Pierre de LESPINAY
6个回答

150

官方Bower页面中提到:

注意:如果您不是要编写供他人使用的包(例如,您正在构建Web应用程序),则应始终将安装的软件包检入源代码控制

请确保查看引文中的链接,它讨论了一些利弊。它提到的主要优点是,将其检入可以确保您的依赖关系始终可用,只要您的存储库可用。无论发生什么事情,都不会影响Bower、GitHub或其他需要的内容。


1
感谢您提供这篇有趣的文章。目前我们仍然没有“锁定文件”等价物来冻结版本。 - Pierre de LESPINAY
1
@PierredeLESPINAY 仅适用于顶层。缺失的是npm收缩包功能的等效物。 - passy
3
在他们的博客文章中也这样说道:“最终,是否要将您的/bower_components目录全部签入是由您决定的……”。 - Krishnaraj
3
将它们注册的原因是因为图书馆有一天可能会从互联网上消失或出现停机时间,这反过来可能会导致构建失败。作为 Maven/Gradle 用户,我从未考虑过检查依赖项。 - Krishnaraj
7
2014年,官方的Bower页面上关于将已安装的软件包加入到源代码控制的建议被删除了:https://github.com/bower/bower.github.io/commit/07d98161cd459be38a5fa7ff73fdc6ff1028d5ad - user
显示剩余3条评论

52

在新生成的Yeoman AngularJS项目中,.gitignore文件列出了要忽略的bower_components目录(以及node_modules目录)。(如果您不知道Yeoman,它是一个非常有声誉的现代Web应用程序搭建工具,这对我来说已经足够好了!):

.gitignore

node_modules
dist
.tmp
.sass-cache
bower_components

10

两种方法都有其适用的时间和场合。对于Yeoman来说,依赖于bower.json是合适的,因为它是工具链中的一个工具,需要与bower生态系统保持同步。对于可部署的Web应用程序,通常最好提交依赖项并保持更多的控制。

这里有一篇我喜欢的好文章讨论了这个问题。


6

如果你在使用 Grunt 和 Node 以及 Bower,则有必要将 bower_components 放在 .gitignore 文件中。因为当你运行 grunt servegrunt build 命令时,它会自动处理依赖项。我相信这也是 Yeoman 将其添加到 .gitignore 文件中的原因。


5
Yeoman生成器预先填充了.gitignore文件中的bower_components,但它还预先填充了其他目录,我认为这些目录是最终应用程序所需的(例如www),因此我进行了一些研究。
我发现www / index.html是app / index.html的压缩版本。 app目录及其内容(包括bower_components)包含生成目录(www)所需的源文件。您将源目录提交到源代码控制(即git),而不是生成的文件(即www)。像bower和npm这样的包管理器是在构建/生成阶段使用的,它们的工件不应被检入源代码控制。
最终,您检入git的源是构建项目的其余部分所需的最小配置。

0

忽略 /bower_components 目录,只检入 bower.jsonbower-locker.bower.json 文件是一个好习惯,如果你使用 bower-locker 这个库,这个锁文件将由 Shawn Lonas 编写。

在 bower-locker 创建之前,由于 bower 没有缩小包的能力,存在一些缺点,但可以通过上述库来减轻这种情况。

运行以下命令以实现此目的:

npm install bower-locker -g

或者

yarn global add bower-locker

然后通过运行以下命令,基于现有的bower.json文件生成锁定文件:

bower-locker lock

原始的bower.json文件将被重命名为bower-locker.bower.json


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