如何在 GitHub 上管理外部 JS/CSS 库
How to manage external JS/CSS libraries on GitHub
对于使用Maven的Java项目,我最近将Twitters Bootstrap添加到GitHub上的存储库中。 现在我注意到我的 GitHub 语言统计信息从
- 100% 爪哇
自
- 66,% Java 33,3% JavaScript
由于我没有编写JS部分,因此有没有办法管理这不算作我的部分,或者通常如何管理GitHub存储库或项目中的外部JS代码
我最近也遇到了这个问题。有几种方法可以处理它:
-
使用性能优化版本,例如 bootstrap.min.js而不是 bootstrap.js 等。 GitHub 使用文件大小来确定每个存储库的语言比例。这不会将其减少到零,但至少会降低比例
-
这可能是你想要的:GitHub 有一个供应商列表,其中包含从语言图中排除的正则表达式。在那里你会看到,jQuery已经是排除的一部分。还有一个待处理的拉取请求来添加 Twitter Bootstrap。如果这没有得到通过,您可以随时将文件添加到名为 vendor 的目录中,在那里它们将被排除在统计信息之外。
-
使用Maven AntRun Plugin:有了它,你可以简单地根据Ant Get的要求下载JavaScript库文件
-
这些JavaScript库还有Maven存储库:Bootstrap-Maven。但是,这些文件安装在
/ext/bootstrap/
,我不知道这有什么帮助 -
还有更多的解决方案,例如使用叠加层的Maven War插件。
最后我的建议:只需将文件放入存储库即可。我在GitHub上使用jQuery和Twitter Bootstrap研究了一些更大的项目,他们都把他们的JavaScript库文件放进了存储库。
这些JavaScript库文件的优点是它们不必编译。利用这一优势,不要为了美观而增加额外的负担。最佳做法似乎是将其添加到存储库并使用愚蠢的语言图。谁知道呢,也许某些文件将来会被忽略。
这个问题相当古老,但为了将来参考,应该注意的是,GitHub 在 2014 年添加了一项新功能来处理这件事。可能要归功于语言学家存储库上的一个未解决的问题。
此功能允许将某些文件视为库,文档或特定语言。
只需将.gitattributes
文件添加到存储库即可。例如,要忽略库文件夹,只需添加以下行:
library/* linguist-vendored
或者要设置 docs 文件夹,请添加以下行:
docs/* linguist-documentation
更多示例可以在这里找到。
两个观察结果:
- GitHub 的统计数据并没有错:你的项目由这些数量的 Java 和 JavaScript 代码组成。说它是一个100%的Java项目是不正确的。 在
- 您自己的代码存储库中包含依赖项并不常见。您可以手动或自动安装它们(使用因每种编程语言/环境而异的系统/方法)。例如,Python有一个名为requirements的文件.txt它列出了依赖关系,但在Java中,我可以想象有类似的方法。
使用 git 子模块或将第三方文件放在名为"vendor"的目录中。然后 Github 不会将它们计为你代码的一部分
Maven 最佳实践是将项目拆分为多个子模块,每个子模块都有一个小的、明确定义的目的。如果您将不同类型的源代码放在同一个 Maven 模块中,那么您没有正确使用它。假设最终你会得到一个.war,那么我的建议是添加Bootstrap,jQuery和你正在使用的任何其他库作为zip依赖项,这些库将包含在war构建中。
假设您可以将这些库作为可下载的 Maven 依赖项提供(我将在下面讨论完成此操作的选项),那么您只需要将它们声明为战争工件的依赖项:
<dependency>
<groupId>com.twitter.bootstrap</groupId>
<artifactId>twitter-bootstrap</artifactId>
<version>2.0.4</version>
<type>zip</type>
<scope>runtime</scope>
</dependency>
就您自己的代码而言,这就是您需要"包含"的所有引导程序。
你如何获得可用的拉链?好吧,最好的办法是看到它发布在中央 Maven 存储库上,但这不是您应该做的事情;Twitter应该加强并照顾所有Maven用户。
下一个最好的办法是找到另一个已经托管它的公共存储库,但是经过短暂的Google搜索后,我找不到一个包装好的存储库,也许您会有更多的运气。
第三种选择是自己动手,并为该zip创建适当的Maven构建并将其发布到您自己的存储库中。
我更喜欢构建此类资源zip的一种解决方案是使用maven程序集插件,您可以将这个maven项目用作灵感:将源代码(js,css和图像文件)放在src/main/resources
中,并添加一个简单的程序集文件,该文件只是将所有文件从资源目录复制到zip中。在服务器上设置一个 maven 存储库(具有 sftp 访问权限的简单 HTTP 服务机器就足够了),并在该项目上执行 maven 发布以将工件上传到服务器上。
(无论如何,您应该有一个用于发布自己的项目的 maven 存储库)
接下来,您需要在真实项目的 pom 文件中声明您的存储库,添加对引导工件的依赖,并配置 maven-dependency-plugin 以将其解压缩到您选择的位置:
...
<repositories><repository>
<id>bootstrap-repo</id>
<name>bootstrap public repository</name>
<url>http://repo.yourhost.net/release</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository></repositories>
...
<dependencies><dependency>
<groupId>com.twitter.bootstrap</groupId>
<artifactId>twitter-bootstrap</artifactId>
<version>2.0.4</version>
<type>zip</type>
<scope>runtime</scope>
</dependency></dependencies>
...
<build><plugins><plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<!-- Unpack the Bootstrap library -->
<artifactItem>
<groupId>com.twitter</groupId>
<artifactId>twitter-bootstrap</artifactId>
<type>zip</type>
<outputDirectory>${project.build.directory}/bootstrap</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin></plugins></build>
...
(我不确定使用 com.twitter
作为 groupId 是否安全,因为他们不是发布该工件的人,因此请使用您自己的 groupId)
由于你自己的代码只是声明了对这个 twitter-bootstrap 工件的依赖,你可以保持你的主 GitHub 仓库没有第三方代码。如果你不希望你的编码统计信息受到影响,你根本不需要提交构建 twitter-bootstrap 工件的项目,尽管你编写的每一行代码都应该提交。
替代方案:maven-antrun-plugin
使用第三方库的 mavenized 打包的另一种方法是使用 maven-antrun-plugin 中的 ant 任务从其官方 zip 发行版中提取这些文件,以下载 zip 并从中提取文件。
或者,您可以在 twitter-bootstrap maven 项目中使用此技巧,以避免完全复制其源文件。
- JS CSS切换按钮没有'不要向上移动
- 我应该连接/缩小已经缩小的JS/CSS吗?如果是,如何
- JS/CSS:如何在向下滚动超过1200像素(高度)后更改z索引值
- JS/CSS旋转的DIVS在任何屏幕的中间相遇
- 在企业应用程序框架中包含js/css文件的最佳实践是什么
- Html+js+css的打包程序
- 如何使用jquery/js/css逐步突出显示一段文本
- 重叠的选项卡 JS CSS HTML.
- 如何从我的机器提供HTML + JS + CSS网络应用程序,以便其他人可以查看它
- MVC Razor,包括来自另一个项目的JS/CSS文件
- 最轻的js/css,用于向用户提供SPA正在加载/初始化的视觉反馈
- 我们怎么知道消除HTML/JS/CSS文件中的空白可以缩短页面加载时间呢
- 有条件的包含js/css文件的IE与流星
- node.js可以选择性地引入到用普通PHP/js/CSS/HTML构建的web应用程序中吗
- 无法使用我的代码(html/js/css)初始化网络摄像头
- 当使用HTTP/2时,缩小和连接JS/CSS文件,以及使用精灵进行图像处理仍然可以提供性能优势
- JS CSS线夹重置(TextOverflowClamp.JS)
- JS CSS时钟在IE中不工作
- 有没有一个Wordpress插件可以让我展示HTML/JS/CSS的例子
- 使用Meteor为每个模板动态加载JS/CSS