如何在 Bower 中注册本地 git 包?

Posted

技术标签:

【中文标题】如何在 Bower 中注册本地 git 包?【英文标题】:How to register a local git package in Bower? 【发布时间】:2012-10-18 08:43:11 【问题描述】:

如何在 bower 中注册本地 git 包?

我现在的component.json如下


  "name": "myproject",
  "version": "1.0.0",
  "dependencies": 
    "jquery": "1.8.0",
    "twitter/bootstrap": "2.1.1"
  

不过,我还想添加一个我在 C:/mypackage 创建的包,这是一个带有版本标记的 git 存储库。 当我执行 bower install --save C:/mypackage 时,它会正确地将其添加到项目中,但不会将其添加到我的 component.json 中。

我正在尝试bower register mypackage C:/mypackage,但它一直在给我

bower error Incorrect format

我做错了什么?

【问题讨论】:

【参考方案1】:

选项 1:公共凉亭注册

Bower 的构建主要是为了以“非主见”的方式共享公共(客户端)代码。那么,主要用例是拥有一个可公开访问的存储库(在 GitHub 上),它是 registerd,带有名称和 git 存储库 url。我自己就是这样做的:

bower register linksoup git://github.com/automatonic/linksoup

这只是告诉 bower 服务器,当您 install linksoup 去获取 git://github.com/automatonic/linksoup 存储库中的代码时,将其放入本地项目的 component 目录中。

如果这是您想要做的,那么只需在 github/etc. 上设置一个存储库,将您的代码推送到那里,然后 register 使用生成的存储库信息。

选项 2:私有依赖

不将代码发布到可公开访问的存储库的原因有很多。它可能不是开源的,等等。如果你的mypackage 代码不打算公开,那么你可能不应该在公共凉亭服务器上registering 它......此外,即使你可以register一个本地目录,它只能在你的机器上运行......这违背了通过 bower 共享代码的目的。

如果您只想让 bower 管理一个本地的私有依赖项,那么我将重复使用 blockhead's 解决方案:


  "name": "myproject",
  "version": "1.0.0",
  "dependencies": 
    "jquery": "1.8.0",
    "twitter/bootstrap": "2.1.1",
    "mypackage": "file:///path/to/mypackage/.git"
  

这只是说myproject 需要mypackage,并使用 git clone 来检索它。我的猜测是这可以使用 git 可以理解的任何东西(包括本地存储库)。但您应该注意,这可能会给其他任何处理此代码而无法访问您的本地路径的人带来问题。

最佳猜测

在我看来,您可能已经假设 bower register 是本地操作(告诉 bower 如何通过某种本地注册表查找依赖项)。据我所知,这只是远程和公共注册,这就是不支持的原因。

您可能还在寻找一种方法来执行link operation with npm 之类的操作。也就是说,在依赖模块上工作,而不必总是让您的开发周期包含发布。

详细说明参与人数以及您要完成的工作将有助于获得更有针对性的答案。

【讨论】:

我也必须使用私有 git 存储库,但我想从共享网络文件夹位置执行此操作。在玩了一些之后,我使用这种格式让它工作:"file:////networkdomain.com/path/to/mypackage/.git"(强调file: 之后的 4 个斜杠而不是 3)【参考方案2】:

您可以按如下方式添加任何 git 存储库:


  "name": "myproject",
  "version": "1.0.0",
  "dependencies": 
    "jquery": "1.8.0",
    "twitter/bootstrap": "2.1.1",
    "myrepo":"git://myrepo.com/myrepo"
  

【讨论】:

记得指定分支:"myrepo":"git://myrepo.com/myrepo#branch" @FrederikWordenskjold - 它将默认为 master 分支,但仍然是一个很棒的评论!我赞成你,只是想我会添加这个小细节。 这个问题清楚地说明了本地 git 包,但这个答案仍然得到 33 个赞? 重点是,你可以做任何 git 仓库。不管它是远程的还是本地的。我只是表明这是可能的。 非常感谢 - 我来这里是为了了解如何使用远程存储库而不是本地存储库来执行此操作。【参考方案3】:

你可以使用bower link:

链接功能使开发人员可以轻松地测试他们的包。 链接是一个两步过程。

在项目文件夹中使用bower link 将创建一个全局链接。 然后,在其他一些包中,bower link <pkg> 将在 components 文件夹中创建一个链接 指向之前创建的链接。

这允许轻松测试包,因为更改将立即反映。 请注意,bower 不会获取链接的包依赖项。

Bower 会在安装/更新时覆盖链接。

【讨论】:

您可以手动使用符号链接而无需通过凉亭。这也适用于其他人,但我不确定 Windows 开发人员。这是我发现可以与其他开发者共享的唯一方法。 @xixixao bower 链接分两步完成,所以如果你移动你的包,你只需要更新 bower 链接,但是如果你直接链接,那么如果你移动你的包,你需要更新所有依赖包手动。【参考方案4】:

bower 的重要理念是轻松共享项目的依赖项。所以使用本地 repo 应该仅限于测试

一旦你理解了这一点,你就应该知道register 你的包并不是严格必要的,以便将其用作依赖项。

这是因为 bower 依赖可以指定 versionfolderpackage。所以您可以使用本地存储库

定义为 bower 包

首先你需要define your dependency as a bower package:

# create the bower package
cd /path/to/you-need-me
bower init
# answer questions…

添加为项目依赖

然后在您的主项目中,需要you-need-me 依赖的项目,编辑bower.json 文件以添加(或扩展):

  "dependencies": 
    …
    "you-need-me":  "file:///path/to/you-need-me/.git/"
    "you-need-me-windows":  "C:/path/to/you-need-me-windows/.git/"
  

所以你没有给出版本,而是一个本地的git端点,即子目录.git/

安装依赖

在 man 项目中安装 bower 依赖项:

cd /path/to/main-project/
bower install

失败

bower you-need-me#*              ENOTFOUND Package /path/to/you-need-me/ not found

再次检查您的路径并确保您指向依赖项的.git/ 目录。

成功

你应该得到类似的东西:

bower you-need-me#*             not-cached file:///path/to/you-need-me/.git/#*
bower you-need-me#*                resolve file:///path/to/you-need-me/.git/#*
bower you-need-me#*               checkout master
bower you-need-me#*               resolved file:///path/to/you-need-me/.git/#b18c753c6f
bower you-need-me#*                install you-need-me#b18c753c6f

为此写一篇博文:Testing bower.json locally before registering package。

【讨论】:

file:///path/to/you-need-me/.git/ 的 .git 部分并不明显,谢谢。 是的,而不是指实际的 repo 使用 file:// 协议不起作用...凉亭只是挂起...

以上是关于如何在 Bower 中注册本地 git 包?的主要内容,如果未能解决你的问题,请参考以下文章

bower私服部署

理解bower是如何管理依赖的

如何使用 bower_components 中已安装的软件包更新 bower.json

如何在本地环境配置github

使用 bitbucket 存储库在 Bower 中创建包

什么是bower