2

我想为我的 web 开发团队部署一个私有的 bower 包服务器?我知道我们公司有一个私有的 npm 包服务器。是否可以部署一个 bower 包服务器?

4

1 回答 1

4

ParadigmShift提供了有关如何执行此操作的指南。我把这篇文章贴在这里:

如何托管私人凉亭注册表

由托兰比卢普斯发表于 2013 年 8 月 4 日

有些人会争辩说,我们今天编写客户端 javascript 的最大障碍是我们没有开箱即用的包管理器。值得庆幸的是,在过去的一年里,已经出现了几个包管理解决方案来解决这个问题。我最近开始玩的一款叫做 bower,它是由 twitter 的工程团队开发的。我选择 bower 的主要原因是 api 与 npm 几乎相同(简单且经证明可以帮助 javascript 开发人员完成工作)

开始使用 bower 很简单,并且有大量的帖子展示了如何开始使用 bower 进行基本的包管理。缺少的是一篇关于如何在组织内部使用 bower 进行内部(防火墙后)包管理的帖子。因此,事不宜迟……这是我试图涵盖这个急需的主题的尝试。

你为什么要问内部凉亭?

您可能托管私有注册表的一个原因是您的公司有一个专有的 javascript 库,并且您不能公开此代码。在防火墙后面同时托管 Web 应用程序和 javascript 包的另一个原因是,它将减少您对外部世界的任何依赖(即,当 github 或公共凉亭网站停机时,它不会影响您的业务) .

1.) 部署您的内部 Bower Web 应用程序

第一步是建立一个简单的按名称存储 git 存储库位置的 bower Web 应用程序。如果您可以/想要托管一个 ruby​​ 网络应用程序,bower 有一个 sinatra 应用程序可以完成这项工作。如果您更喜欢 python,我编写了一个简单的 django 应用程序来解决问题。或者您可以自己编写,因为它的核心是一个简单的名称/url REST api。

对于这个例子,我将使用 django 应用程序,因为我想看看我能多快在香草树莓派上建立一个私人凉亭注册表。在本地启动 python/django bower 注册表

git clone https://github.com/toranb/django-bower-registry.git registry

cd ~/Projects/registry

mkvirtualenv registry

pip install -r requirements.txt

python manage.py dev syncdb --migrate --noinput

python manage.py dev runserver

2.) 设置裸存储库的预发布步骤

bower 1.0 缺少的功能之一是您没有存储来保存 javascript 文件(主要是因为它假定您需要的每个包都是一个公共可访问的 github 存储库)。您可以解决这个问题,但由于 bower api 不支持它,您需要手动执行几个步骤。

所需的第一个手动步骤是为您要在内部存储的 javascript 包下拉一个 git 存储库(bower 也适用于独立文件,但为了便于升级,我更喜欢基于 git 的方法)。在这个例子中,我将只拉下时刻库,因为它是我通常在涉及日期时间的项目中使用的东西。

cd ~/Projects

git clone https://github.com/moment/moment.git

接下来,您将需要在您的 Web 服务器(或您将存储 js 文件的其他位置)上创建一个裸 git 存储库。对于这个例子,为了简单起见,我将把 javascript 存储在我的本地 Web 服务器上。

cd ~/Projects/registry/api/static/api/packages

git init --bare moment.git

3.) 将 git 存储库推送到您的 Web 服务器

现在我们有了一个空的 git 存储库,我们可以添加一个远程并推送代码。请注意,我在这里使用 ssh,因此需要进行身份验证。

关于我在下面显示的路径的快速说明 - 我的用户名是 toranb 并且我的项目目录的完整路径是/Users/toranb/Projects所以如果您在开发人员计算机或远程 Web 服务器上本地执行此操作,请务必更改以下内容

cd ~/Projects/moment`

git checkout master (moment defaults to the develop branch and bower plays nice with master)

git remote add bower ssh://toranb@127.0.0.1/Users/toranb/Projects/registry/api/static/api/packages/moment.git

在你可以推送之前,你需要让你的 ssh 设置在本地工作(如果你在 OSX 上使用这个 bash 脚本来获得相同的 linux ssh-copy-id)。如果你还没有在你的机器上生成一个 ssh 密钥,github 有一个很棒的教程。

ssh-copy-id -i ~/.ssh/id_rsa toranb@127.0.0.1

git push bower master

如果您需要基于标签(即库的特定版本)安装的能力,您还应该将标签推送到新的 Bower 遥控器。

git push --tags bower master

4.) 向 bower 注册包

下一步是 ssh:// 使用内置的“bower register”命令(所以这是解决方法)。如果您尝试 => bower register moment ssh://... 它将因错误而失败。

bower EINVFORMAT The registry only accepts URLs starting with git://

因为 bower 仅适用于公共可访问的存储库,所以它拒绝 ssh:// 因为它需要身份验证。所以现在我使用 curl 来解决这个问题(本质上是一个 http POST,用于在给定名称/url 的内部凉亭上创建包)

curl http://127.0.0.1:8000/packages/ -v -F 'name=moment' -F 'url=ssh://toranb@127.0.0.1/Users/toranb/Projects/registry/api/static/api/packages/moment.git'

5.) 在你的前端项目中安装包

所以现在我们的 bower web 应用程序有一个 name/url 指向 web 服务器上的 git 存储库,我们可以使用 bower 安装 moment

cd ~/Projects/your_project_goes_here

在您可以使用 bower 安装之前,我们需要告诉它您的内部 bower 注册表(因为 bower 默认为您组织外部的公共 bower Web 应用程序)

echo '{"registry": "http://localhost:8000"}' > .bowerrc

现在我们已经使用 .bowerrc 文件在您的本地项目中设置了您的 bower 注册表,我们可以使用您的内部 bower web 应用程序安装 moment

npm install bower

bower install moment

如果您想安装特定版本的 moment 并将标签推送到您的 Web 服务器远程,请使用可选的 hash - 像这样的版本

bower install 'moment#2.1.0'

我希望如果 / 当 bower 正式支持像这样的私有存储时,我上面概述的详细注册过程将消失。但目前,这种解决方法允许您控制 Web 应用程序和您依赖的所有生产 javascript 包。


另请注意,尝试创建一个名为bower nest的节点/sqlite 服务器。


请注意,我不是其中任何一个的作者......我只是做了一些谷歌搜索来找到这些。

于 2013-11-30T05:29:51.113 回答