将你的 KISSY 程序移植到服务器端 – nodejs-kissy 项目简介

如果你还不了解 NodeJS,请参照 NodeJS.org,简言之:

Node.js 是服务器端的 JavaScript 运行环境,它具有无阻塞(non-blocking)和事件驱动(event-driven)等的特色,Node.js 采用 V8 引擎,同样,Node.js 实现了类似 Apachenginx 的web服务,让你可以通过它来搭建基于 JavaScript 的 Web App。

你可以通过我们前些天 team 内的一个分享来了解下 NodeJS

nodejs-kissy 项目

KISSY 是淘宝网开发的一款轻巧灵活的JS框架,如今已经是1.1.5版本,并在淘宝网广泛应用,在浏览器端给我们带来更加清新的体验,今天让我们更进一步,我们发起了nodejs-kissy 项目,你的 KISSY 程序可以无缝移植到服务器端了

从这里开始 nodejs-kissy

得益于 KISSY 轻巧的设计,核心模块可以很充分的解偶,所以对 KISSY 作简单hack就能够运行在 NodeJS 上。但开始之前应该首先准备好预装了 npm 的服务器(linux/FreeBSD/MacOS/cygwin),npm 是 NodeJS 软件包管理器,类似yum 和 apt-get,通过他来安装 NodeJS 的软件包会非常方便。

准备 npm:

curl http://npmjs.org/install.sh | sh

如果你的账户没有权限则先准备好目录权限:

sudo chown -R $USER /usr/local

安装成功后就可以通过 "npm install package_name" 命令来安装 NodeJS 软件包了

安装 Nodejs-KISSY 的依赖:服务器端没有浏览器环境,要运行js需要模拟真实的浏览器环境,因此 KISSY 需要依赖一些包:

npm install jsdom
npm install htmlparser
npm install express
npm install connect

安装Nodejs-kissy:

npm install kissy

运行 “hello world”:

新建文件 helloworld.js

var S = require('kissy').KISSY;
S.ready(function(S){
        S.log('hello world!');
});

运行:

node helloworld.js

更方便的移植?

你可能会好奇,服务器端没有浏览器,为什么KISSY能如此轻松的运行在服务器端?这主要是因为KISSY的模块加载机制是脱离浏览器环境的,也就是说KISSY.use、KISSY.add、KISSY.app是和环境无关的,它只关系到你组织代码的方式和风格,另外,得益于足够原生态的KISSY-DOM实现,KISSY只调用到domjs(domjs的高层api是面向YUI3设计的)的基础方法,所以DOM相关操作依然可以无缝嫁接到服务器端,相对于YUI3核心模块的深层次耦合,KISSY的移植实在是太轻松了。

策略上的取舍

KISSY 基于“one for all”理念的core和粗粒度的widget,使得KISSY可以使用更少的"引入文件"来执行程序,而非必要一定采用combo(即使采用combo性能未必提高多少),这样使得require的逻辑策略更简便。

所见即所得

和YUI3一样,KISSY-Loader 也可以非常方便的引入外部脚本,不管脚本是存放在服务器上,还是通过http请求到,开发者只要require fullpath即可,非常低碳,比如我可以这样运行:

var S = require('kissy').KISSY;
S.add({
    'menu':{
        fullpath:'http://cdn/menu.js'
    }
}).use('menu',function(S){
    new S.Menu('ID');
});

总之,你在浏览器端怎么用 KISSY,你就在服务器端怎么写,接下来,nodejs-kissy 项目的主要工作是更多的测试和提高其健壮性。nodejs-kissy 和 KISSY 一样基于 MIT 协议,你可以通过 fork github 上的项目来参与 nodejs-kissy 的开发。

posted at