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

62

如何在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

我做错了什么?

4个回答

71

选项1:公共Bower注册

Bower主要用于以“非指导性”的方式共享公共(客户端)代码。因此,主要用例是拥有一个可以公开访问的存储库(在GitHub上),该存储库使用名称和git存储库URL进行注册。我刚刚自己完成了这个过程:

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

这只是告诉 bower 服务器,当你 安装 linksoup 时,去获取位于 git://github.com/automatonic/linksoup 仓库中的代码,并将其放置在本地项目的component目录中。

如果这正是你想要做的事情,那么只需在 github 等平台上创建一个仓库,将你的代码推送到仓库中,然后使用所得到的仓库信息进行注册即可。

选项 2:私有依赖项

有很多理由不将你的代码发布在公共可访问的仓库中。它可能不是开源的等等。如果你的 mypackage 代码不打算公开,那么你可能不应该在公共 bower 服务器上进行注册... 此外,即使你可以register一个本地目录,它也只能在你的机器上工作...这违背了通过 bower 共享代码的初衷。

如果你只想让 bower 管理本地的私有依赖项,那么我会参考blockhead的解决方案:

{
  "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如何通过某种本地注册表找到依赖项)。据我所知,这只是一种远程和公共的注册,这就是为什么不支持的原因。

你可能还在寻找一种类似于npm中的链接操作的方式。也就是说,在不始终发布的情况下处理依赖模块。

一些关于涉及的人数以及你尝试完成的任务的详细信息将有助于更有针对性地回答。


2
我不得不使用一个私有的git仓库,但我想从共享网络文件夹位置进行操作。经过一些尝试,我使用了这种格式使其工作:"file:////networkdomain.com/path/to/mypackage/.git"(强调在file:后面使用4个斜杠而不是3个)。 - bgoerdt

53

你可以按照以下方式添加任何git仓库:

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

23
请记得指定分支: "myrepo":"git://myrepo.com/myrepo#branch"。 - Frederik Wordenskjold
2
@FrederikWordenskjold - 将默认使用主分支,但无论如何都是一条很棒的评论!我为你点赞了,只是想补充这个小细节。 - Sten Muchow
1
问题明确说了本地git包,但这个答案还是得到了33个赞? - Ashish Singh
3
重点是,你可以操作任何 Git 仓库,无论是远程还是本地的。我只是想表明这是可能的。 - blockhead
1
很感激——我来这里是想了解如何使用远程仓库而不是本地仓库来完成这个任务。 - Marty Kiker

33
您可以使用 bower link

链接功能允许开发人员轻松测试其软件包。 链接是一个两步骤的过程。

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

这使得很容易测试一个软件包,因为更改将立即反映出来。 请注意,bower 不会获取链接的软件包依赖项。

在安装/更新时,bower 将覆盖链接。


你可以手动使用符号链接而不必通过bower。这对其他人也适用,但我不确定Windows开发人员是否可行。这是我找到的唯一可以与其他开发人员共享的方法。 - xixixao
@xixixao bower链接分为两步,因此如果您移动了包,只需更新bower链接即可。但是,如果您直接链接,则如果您移动了包,则需要手动更新所有依赖包。 - Ali Shakiba

24

Bower的核心思想是轻松分享你的项目依赖项。因此,使用本地存储库应该仅限于测试目的

一旦你理解了这一点,就应该知道并不一定需要严格地注册你的包才能将其用作依赖项。

这是因为Bower的依赖关系可以指定版本文件夹。因此,你可以使用本地存储库

将其定义为Bower包

首先,你需要将你的依赖项定义为Bower包

# 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/

安装依赖

在主项目中使用以下命令安装 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

写一篇关于此事的博客:在注册软件包之前本地测试bower.json


1
文件路径 file:///path/to/you-need-me/.git/ 中的 .git 部分不太明显,感谢指出。 - the_karel
使用file://协议时,Ye并没有起作用... bower只是挂起了... - justin

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