返回介绍

Day 8: Harp.JS - 现代静态 web 服务器

发布于 2025-01-31 20:47:29 字数 7945 浏览 0 评论 0 收藏 0

到目前为止,我们的 “30 天学习 30 种技术” 系列已经讨论了 BowerAngularJSGruntJS 。这些最新的技术可以帮助开发者更高效地开发,也可以减轻开发者的负担。今天,我们将学习另一项新 JavaScrit 技术,它叫做 Harp。在本文中,我们将开始了解 Harp 的基础,接着我们将创建一个简单的 Harp 应用,最后将此应用部署到 OpenShift。

Harp 是什么?

Harp 是为现代 web 应用准备的开源静态服务器。它可以为 Jade、Markdown、EJS、CoffeeScript、LESS、Stylus 和 HTML、CSS、Javascript 提供服务,无需任何配置。

由于越来越多的开发转向客户端,开发者们开始使用替代语言,然后将其编译为原生语言。比如,我们使用诸如 Jade 和 EJS 之类的模板库,而不是直接编写 HTML。同理,我们可以使用 CoffeeScript,而不是直接写 JavaScript。至于样式,我们可以用 Stylus 和 LESS 取代 CSS。

Harp 是零配置的服务器,用于为静态资源提供服务。它内置了对 .jade.markdow.ejs.coffee.less.styl.html.css.js 的支持。

Harp 依赖

Harp 依赖于 NodeJS 和 NPM 包管理器(node.js 安装自带 NPM)。你可以从 官网 下载最新版的 NodeJS。一旦安装了 node.js 和 NPM,就可以使用 NPM 安装 Harp。

安装 Harp

输入如下命令安装 Harp。

npm install -g harp

以上命令将全局安装 harp 包,这样在任何目录都可以使用 harp 命令。

(取决于你系统的设置,你可能需要在命令前加上 sudo 。)

创建 Harp 项目

harp 命令行让我们可以方便地创建 harp 应用。创建一个应用,只需使用 harp init 命令。

harp init blog

这会创建一个名为 blog 的目录,结构如下:

harp 创建的项目默认使用 Jade(html) 和 LESS(css)。

启动 Harp 服务

我们可以使用 harp server 命令来运行应用:

$ cd blog
$  harp server

      _____          _____          _____          _____      
     /l  l          /l  l          /l  l          /l  l     
    /::l____l        /::l  l        /::l  l        /::l  l    
     /:::/  /         /::::l  l        /::::l  l        /::::l  l     
    /:::/  /         /::::::l  l      /::::::l  l      /::::::l  l    
   /:::/  /         /:::/l:::l  l      /:::/l:::l  l      /:::/l:::l  l   
  /:::/____/         /:::/__l:::l  l    /:::/__l:::l  l    /:::/__l:::l  l  
   /::::l  l        /::::l   l:::l  l    /::::l   l:::l  l    /::::l   l:::l  l   
  /::::::l  l   _____  /::::::l   l:::l  l  /::::::l   l:::l  l  /::::::l   l:::l  l  
 /:::/l:::l  l /l  l  /:::/l:::l   l:::l  l  /:::/l:::l   l:::l____l  /:::/l:::l   l:::l____l 
/:::/  l:::l  /::l____l/:::/  l:::l   l:::l____l/:::/  l:::l   l:::|  |/:::/  l:::l   l:::|  |
l::/  l:::l  /:::/  /l::/  l:::l  /:::/  /l::/   |::::l  /:::|____|l::/  l:::l  /:::|____|
 l/____/ l:::l/:::/  /  l/____/ l:::l/:::/  /  l/____|:::::l/:::/  /  l/_____/l:::l/:::/  / 
      l::::::/  /      l::::::/  /     |:::::::::/  /      l::::::/  /  
       l::::/  /        l::::/  /      |::|l::::/  /        l::::/  /   
       /:::/  /         /:::/  /       |::| l::/____/        l::/____/  
      /:::/  /         /:::/  /      |::|  ~|             ~~      
     /:::/  /         /:::/  /       |::|   |                   
    /:::/  /         /:::/  /        l::|   |     Harp v0.9.4         
    l::/  /        l::/  /        l:|   |     Static Web Server       
     l/____/          l/____/          l|___|     By Chloi Inc. 2012-2013   

Your server is listening at http://localhost:9000/

现在,访问 http://localhost:9000/ 你会看到如下页面:

https://www.openshift.com/sites/default/files/images/harp-sample-app.png

我们打开 index.jade 文件,做一些改动:

h1 Welcome to Harp.
h3 This is my blog. Enjoy.

刷新一下浏览器,我们就能看到改动了。

部署到云端

部署 harp 应用有多种方式,详见 文档 。我将介绍如何部署到 OpenShift

OpenShift 是一个公开的 PAAS,你可以使用 OpenShift 免费部署 Java、NodeJS、Ruby、Python 和 PHP 应用。

在我们部署应用到 OpenShift 之前,我们需要先设置一下:

  1. 注册一个 OpenShift 账号 。注册是完全免费的,Red Hat 给每个用户三枚免费的 Gear,可以用 Gear 运行你的应用。在写作此文的时候,每个用户能免费使用总共 1.5 GB 内存和 3 GB 硬盘空间。
  2. 安装 rhc 客户端工具rhc 是 ruby gem,因此你的机子上需要装有 ruby 1.8.7 以上版本。 只需输入 sudo gem install rhc 即可安装 rhc 。如果你已经安装过了,确保是最新版。运行 sudo gem update rhc 即可升级。关于配置 rhc 命令行工具的详细信息,请参考: https://openshift.redhat.com/community/developers/rhc-client-tools-install
  3. 使用 rhc 的 setup 命令配置你的 OpenShift 账号。这个命令会帮助你创建一个命名空间,同时将你的 ssh 公钥上传至 OpenShift 服务器。

设置之后,我们可以通过如下命令创建一个新的 OpenShift 应用。

rhc create-app blogonopenshift nodejs-0.10

这会为我们创建一个名为 gear 的应用容器,并自动配置相应的 SELinux 政策和 cgroup 设置。OpenShift 同时会为我们创建一个私有的 git 仓库,并将其克隆到本地。最后,OpenShift 会自动配置 DNS。应用可以在如下地址访问

http://blogonopenshift-{domain-name}.rhcloud.com/

{domain-name} 替换为你自己的 OpenShift 域名(也叫命名空间)。

接着,跳转到 blogonopenshift 文件夹,初始化一个新的 harp 项目。

cd blogonopenshift
harp init _harp

这会在 blogonopenshift 目录的 _harp 文件夹中创建 harp 应用。

修改 blogonopenshift 目录中的 package.json ,添加 harp 依赖。

{
  "dependencies": {
  "harp" : ">=0.8"
  }
}

然后,使用 NPM 安装依赖:

npm install

接着修改 server.js

require('harp').server("_harp", { ip : process.env.OPENSHIFT_NODEJS_IP, port: process.env.OPENSHIFT_NODEJS_PORT})

在上面的例子中,我们创建了一个 harp 服务器的实例。我们把与该服务器绑定的 OpenShift 环境下的 ip 地址和端口号传递给它。在云环境中,建议使用环境变量,而不是写死了的值。

如果你现在将代码推送到 OpenShift,它还不能工作。这是因为 harp API 没有提供配置 IP 地址的选项。为此我在 GitHub 的 harp 仓库上开了一个 工单 。就目前而言,我们需要打开 node_modules/harp/lib 目录下的 index.js 文件,修改下 server 函数:

/**
 * Server
 *
 * Host a single Harp Application.
 *
 */

exports.server = function(dirPath, options, callback){
  connect.createServer(
  middleware.regProjectFinder(dirPath),
  middleware.setup,
  middleware.underscore,
  middleware.mwl,
  middleware.static,
  middleware.poly,
  middleware.process,
  middleware.fallback
  ).listen(options.port,options.ip ,  callback)
}

本地提交代码,然后推送变动到云端。

git add .
git commit -am "blogonopenshift app deployed to cloud"
git push

推送代码之后,应用被部署到 OpenShift 上,我们可以在 http://blogonopenshift-{domain-name}.rhcloud.com 上访问我们的应用。我们的示例应用跑在 http://blog-shekhargulati.rhcloud.com 上。

今天就这些了。我希望这会有用。请继续反馈。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文