前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CommonJS

CommonJS

作者头像
四火
发布2022-07-15 20:17:36
3460
发布2022-07-15 20:17:36
举报
文章被收录于专栏:四火的唠叨四火的唠叨

老实说,之前我对 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 的如下子规范:

再如大名鼎鼎的 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 完成更多的实现等等。

文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《四火的唠叨》

×Scan to share with WeChat

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档