`

关于CommonJS

阅读更多

老实说,之前我对CommonJS也是一无所知,直到不久前Node.js火起来,我去研究它,才了解到Node.js其实是CommonJS的一个部分实现,我才关注起CommonJS来。

 

 

以前我们说起HTML,我们说起JavaScript,大家的印象似乎都停留在了“网页”上面,从2005年开始,因为Ajax的缘故,有一种叫做“前端程序员”的新型物种诞生了。

可是现在,前端程序员不甘心自己的一亩三分地了,他们要越权,看看HTML 5的API吧,它是要吃了Flash啊,连Adobe都倒向HTML 5了,它的API可以做各种各样的事情,要绘图、操作文件、客户端数据库、摄像头、重力感应……这些特性,怎么看怎么都是一个Native App,或者是一个服务端的应用才具备的啊。

另一方面,在2009年8月,CommonJS诞生了(不妨读读这篇文章)。正是站在JavaScript的层面,它要做这样一件类似的事情(The CommonJS API will fill that gap by defining APIs that handle many common application needs, ultimately providing a standard library as rich as those of Python, Ruby and Java.),同时伴随着JavaScript的解释器愈来愈成熟,性能越来越强,JavaScript的威力不再仅仅被限制在浏览器端。

 

  • 服务端JavaScript应用
  • 命令行工具
  • 图形界面应用
  • 混合应用(Titanium、Adobe AIR等)

这就是CommonJS的着力点。从CommonJS的官网来看,它至始至终都避免使用“规范”这个词,似乎不想自认,但我的理解,CommonJS本质上就是一个规范,它并不提供默认实现,而是要求一些JavaScript库、框架、环境……去实现它的这些API定义。

 

那么,都有哪些API层面的定义呢?

  • binary: Binary Data Objects (byte arrays and/or strings) (proposals, discussion, early implementations)
  • encodings: Encodings and character sets (proposals, discussion, early implementations)
  • io: I/O Streams (proposals, discussion)
  • fs, fs-base: Filesystem (proposals, discussion, early implementations)
  • system: System Interface (stdin, stdout, stderr, &c) (1.0, amendments proposed)
  • assert, test: Unit Testing (1.0, amendment proposals pending)
  • sockets: Socket I/O TCP/IP sockets (early proposals)
  • event-queue: Reactor Reactor/Event Queue (early proposals)
  • worker: Worker Worker (concurrent shared nothing process/thread) (proposal)
  • console: console (proposal)

 

OK,涉及到二进制、编码、IO、文件、系统、断言测试、套接字、事件队列、Worker、控制台等等实现,恰恰弥补的传统JavaScript的空白。

 

就以Node.js为例,它实现了CommonJS的如下子规范:

  • Modules/1.0 (yes)
  • Promises/B (http://github.com/kriskowal/q)
  • Promises/D (https://github.com/kriskowal/q)
  • Unit Testing/1.0 (yes)

再如大名鼎鼎的SeaJS、CouchDB和RequireJS,都是CommonJS的部分实现

如果你有兴趣,在这里可以找到CommonJS所有的子规范。

 

未来CommonJS还需要加入的底层API定义包括(语言和运行时环境、日志、关系数据库接口、结果集、并发、字符串/字节序列/IO、目标平台的C语言标准统一的API和子进程):

  • Language and Runtime Services
  • Logging
  • Relational database interface
  • ResultSets (collections of data maybe from RDBMS, maybe from other sources)
  • Concurrency
  • String / ByteString I/O
  • C unified API to our Target Platforms
  • Subprocesses (popen)

高层API包括(HTTP客户端API、Email、Jabber、国际化、Promise管理器、命令行处理):

  • HTTP client APIs
  • Email
  • Jabber (XMPP)
  • Internationalization
  • Promise Manager
  • Command line processing

这些都可以在CommonJS自己的Wiki上找到。

 

按照CommonJS小组自己的话来说,在CommonJS 0.5版本的开发过程中,已经讨论了API需要包含的范围,建立了一个收集提议和优先级信息的Wiki页,讨论了现有的提议并排序,达成了基本一致的意见,提议都已在Wiki上定稿;现在当务之急包括给应用设计合理的API并文档化,给这些API完成更多的实现等等。

 

文章系本人原创,转载请注明出处和作者

  • 大小: 14.6 KB
7
0
分享到:
评论
6 楼 chenbinqun 2014-07-05  
   写得不错呢,赞一个
5 楼 dogdeng 2013-01-16  
哇,看懂啦
4 楼 dengmawei 2012-04-20  
有点晕,呵呵
3 楼 RayChase 2012-04-07  
fancyleeo 写道
没看懂……

什么没有看懂?
2 楼 fancyleeo 2012-04-02  
Am I stupid? 
1 楼 fancyleeo 2012-04-02  
没看懂……

相关推荐

    commonjs,commonjs9

    扩展的EXTJS公共类,扩展的EXTJS公共类,扩展的EXTJS公共类

    rollup-plugin-commonjs, 将CommonJS模块转换为 ES2015.zip

    rollup-plugin-commonjs, 将CommonJS模块转换为 ES2015 rollup-plugin-commonjs 将CommonJS模块转换为 ES6,以便它们可以包含在Rollup包中安装npm install --save-dev rollup-plugin-commonjs用法

    commonjs,commonjs3

    扩展的EXTJS公共类,扩展的EXTJS公共类,扩展的EXTJS公共类

    commonjs,commonjs1

    扩展的EXTJS公共类,扩展的EXTJS公共类,扩展的EXTJS公共类

    commonjs,commonjs10

    扩展的EXTJS公共类,扩展的EXTJS公共类,扩展的EXTJS公共类

    一个Babel7转换插件用于将CommonJS转换为ESM

    本篇文章将深入探讨Babel 7中的转换插件,特别是如何使用`babel-plugin-transform-commonjs`将CommonJS转换为ESM。 首先,让我们了解CommonJS和ESM的区别。CommonJS采用同步导入机制,允许在代码中使用`require()`...

    commonjs,commonjs8

    扩展的EXTJS公共类,扩展的EXTJS公共类,扩展的EXTJS公共类

    CommonJS时代的JS模块和编译工具

    CommonJS是一种在服务器端JavaScript中实现模块化的规范,它的出现主要是为了标准化服务器端JavaScript模块的加载机制。CommonJS规范最初于2009年提出,它的设计理念是基于同步加载机制,并且以文件为模块的载体。在...

    commonjs-everywhere, 具有别名,可扩展性和源映射的CommonJS浏览器 bundler.zip

    commonjs-everywhere, 具有别名,可扩展性和源映射的CommonJS浏览器 bundler 到处都是 web浏览器使用从缩小的JS包到原始源的源代码,浏览器替代的别名和任意语言支持的可扩展性。安装npm install -g commonjs-...

    nashorn-commonjs-modules, CommonJS的模块支持 Nashorn.zip

    nashorn-commonjs-modules, CommonJS的模块支持 Nashorn CommonJS模块支持 Nashorn这个库增加了对CommonJS模块( aka require ) inside的支持( Nashorn脚本引擎) 。 它基于 NodeJS模块的规范,它支持从文件夹加载模块...

    01CommonJS.rar

    CommonJS是Node.js中实现模块化开发的重要规范,它允许我们在JavaScript中导入和导出模块,使得代码结构清晰、可复用性增强。本文将深入探讨CommonJS的基本概念、使用方法以及通过一个模拟扑克牌发牌的小例子来实践...

    commonjs,commonjs7

    扩展的EXTJS公共类.扩展的EXTJS公共类.扩展的EXTJS公共类

    CommonJS和ES6模块的区别

    ### CommonJS与ES6模块的区别详解 #### 一、引言 随着JavaScript的发展与应用领域的扩展,特别是Node.js的出现,让JavaScript不仅局限于浏览器环境,更拓展到了服务器端。为了更好地管理和组织代码,模块化成为了...

    JS中的模块规范(CommonJS,AMD,CMD(少用))

    #### 一、CommonJS **CommonJS** 是为了解决JavaScript在实际应用中缺乏模块化支持的问题而诞生的一种规范。它最初是为了让JavaScript能够在服务器端运行,尤其是为了适应Node.js这样的环境。CommonJS的出现极大地...

    rollup-plugin-commonjs:此模块已移动,现在可通过@ rollupplugin-commonjs https获得

    汇总插件-commonjs 将CommonJS模块转换为ES6,以便可以将它们包含在汇总包中安装npm install --save-dev rollup-plugin-commonjs用法通常,您可以将此插件与一起使用,以便将CommonJS依赖项捆绑在node_modules 。...

    browser-commonjs:在浏览器中使用 CommonJS 模块

    浏览器-commonjs 在浏览器中使用 CommonJS 模块。 安装 $ bower install browser-commonjs 用法 < script src =" contentloaded.js " > </ script > < script src =" browser-common.js " > &...

    commonjs-rhino:Ruby中CommonJs对Rhino的支持

    普通犀牛CommonJs在Ruby中(特别是JRuby)对Rhino的支持。 commonjs-rhino允许您创建JavaScript上下文,其中包含可用于加载CommonJs模块的require方法。安装gem install commonjs-rhino 然后,在您的代码中的某处...

    commonjs1.part04.rar

    commonjs1.part04.rar

Global site tag (gtag.js) - Google Analytics