Jscex正式发布至npm
2011-12-01 14:23 by 老赵, 4702 visits之前一直不敢将Jscex发布至npm上,因为有些问题还没有完全拿定主意,例如“取消”任务的模型。一个异步任务一定是需要取消功能,尽管这个模型不一定需要直接定义在Jscex里。但是我还是为Jscex提供了一个统一的标准化的取消模型,一是易于使用,二是提供模型这个之后,API在设计时可以有更多表现力(例如,现在的task的status可能是canceled了)。上周末我实现这个模型(其实也就十几二十行代码),昨天我又修改了模块的加载方式,使其支持CommonJS规范。在发布到npm之后,现在可以说Jscex已经正式对外公开了!
在加载Jscex代码之后,全局环境里会出现一个Jscex对象,这是所有Jscex功能的入口(根对象)。但对于Node.js来说,相同的模块(无论版本是否一致)有可能还会被加载多次,因此这种方式并不适合Node.js。昨天的修改主要就是为了迎合Node.js的包管理机制(类似CommonJS),避免对全局环境造成污染。自然,如果脚本执行环境里没有实现CommonJS规范(例如浏览器),则Jscex的行为依然和之前保持不变。
目前Jscex的核心部分已经发布到npm里,版本为0.5.0,分为两个互不依赖的三个部分:
- jscex:提供了Jscex的基础功能,作为Jscex的根对象。
- jscex-jit:提供了Jscex的JIT编译器,以“插件”形式为Jscex根对象进行扩展,一般仅作为开发工具使用。
- jscex-async:Jscex的异步支持,以“插件”形式为Jscex根对象进行扩展。在Node.js中一般与JIT编译器同时使用,但理论上可以在AOT编译之后摆脱对JIT编译器的依赖。
您可以使用npm安装这三个模块:
$ npm install jscex jscex-jit jscex-async jscex@0.5.0 ./node_modules/jscex jscex-jit@0.5.0 ./node_modules/jscex-jit jscex-async@0.5.0 ./node_modules/jscex-async
然后即可在脚本里使用:
var Jscex = require("jscex"); require("jscex-jit").init(Jscex); require("jscex-async").init(Jscex);
然后便可以像以前那样正常使用Jscex了。请注意,由于Jscex的实现方式所限,一定要在上下文里存在名为Jscex的根对象。此外,目前发布在npm上只有JIT编译器及其异步支持的核心功能,并没有包含如sleep或parallel方法那样的核心类库。这部分代码已经被剥离至jscex-async-powerpack模块内,将在合适的时候发布至npm上。
目前使用Jscex的人依旧不多,有同学将Jscex配合HTML 5的绘图使用,进行了进行了许多尝试,颇为有趣。如果您对Jscex有什么意见或建议,也请及时告知。
不错,真入node.js