我想为我的Web开发团队部署一个私人bower包服务器?我知道我们公司有一个私有的npm包服务器。是否可以部署一个bower包服务器?
答案 0 :(得分:4)
ParadigmShift提供了有关如何执行此操作的指南。我在这里贴了这篇文章:
Toran Billups于2013年8月4日发布
有人认为我们今天编写客户端javascript的最大障碍是我们没有开箱即用的包管理器。值得庆幸的是,在过去的一个日历年,已经出现了几个包管理解决方案来解决这个问题。我最近开始玩的那个叫做凉亭的人正在由twitter的工程团队开发。我接下来的主要原因是api几乎与npm完全相同(简单且经过验证可以帮助javascript开发人员完成工作)
bower入门很简单,并且有很多帖子显示如何开始使用bower进行基本的包管理。缺少的是关于如何在组织内部使用bower进行内部(防火墙后)包管理的帖子。所以没有进一步的麻烦...这是我试图涵盖这个非常需要的主题。
您可能拥有私人注册表的一个原因是您的公司拥有专有的JavaScript库,您无法公开此代码。在防火墙后面托管Web应用程序和javascript包的另一个原因是,它会减少您对外部世界的依赖性(即,当github或公共凉亭网站停机时,它会赢得并影响您的业务)。
1。)部署内部广告网络应用
第一步是站立一个bower web应用程序,它只是按名称存储你的git存储库的位置。如果您可以/想要托管一个ruby Web应用程序,bower有一个sinatra应用程序可以完成这项工作。如果您更喜欢python,我写了一个简单的django应用程序来完成这个技巧。或者你可以编写自己的,因为它的核心是一个简单的REST api for name / url。
对于这个例子,我将使用django应用程序,因为我想看看我能够多快地在香草覆盆子pi上获得私人凉亭注册表。在本地启动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存储库)。您可以解决这个问题,但由于凉亭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,因此需要进行身份验证。
关于我在下面显示-my用户名的路径的快速说明是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
如果您需要能够基于标签(即特定版本的库)进行安装,您还应该将标签推送到新的割草机遥控器。
git push --tags bower master
4.。)用凉亭注册包
下一步是ssh://使用内置的&#b; bower寄存器'命令(所以这是解决方法)。如果你试试=> bower register moment ssh:// ...它会因错误而失败。
bower EINVFORMAT The registry only accepts URLs starting with git://
由于bower仅适用于公共可访问的存储库,因此它拒绝ssh://,因为它需要身份验证。所以现在我使用curl来解决这个问题(基本上是一个http POST来为你的内部bower创建一个名字/ 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应用程序有一个名称/ url指向Web服务器上的git存储库,我们可以使用bower安装时刻
cd ~/Projects/your_project_goes_here
在您使用bower进行安装之前,我们需要告诉您有关内部bower注册表的信息(因为bower默认使用您组织之外的公共凉亭网络应用程序)
echo '{"registry": "http://localhost:8000"}' > .bowerrc
现在我们使用.bowerrc文件在您的本地项目中设置了bower注册表设置,我们可以使用您的内部bower web app安装时刻
npm install bower
bower install moment
如果您想要安装特定版本的时刻并将标签推送到您的Web服务器远程,请使用可选的哈希 - 版本如此
bower install 'moment#2.1.0'
我希望如果/当凉亭正式支持这样的私人存储时,我上面概述的详细注册流程将会消失。但是现在这种解决方法允许您控制Web应用程序和您依赖的所有生产JavaScript包。
另请注意,尝试创建名为bower nest的node / sqlite服务器。
请注意我不是其中任何一个的作者......我只是做了一些谷歌搜索来找到这些。