CommonJS

CommonJS is a project with the goal to establish conventions on the module ecosystem for JavaScript outside of the web browser. The primary reason for its creation was a major lack of commonly accepted forms of JavaScript module units which could be reusable in environments different from that provided by conventional web browsers running JavaScript scripts (e.g. web servers or native desktop applications).

CommonJS's module specification is widely used today, in particular for server-side JavaScript programming with Node.js.[1] It is also used in the development of browser-side JavaScript, but the code must be packaged with a transpiler since browsers don't support CommonJS.[1] The other major server-side module specification in use is the ES modules specification (ES6 modules).[2] CommonJS can be recognized by the use of the require() function and module.exports, while ES modules use import and export statements for similar (though not identical) functionality.

History

The project was started by Mozilla engineer Kevin Dangoor in January, 2009 and initially named ServerJS.[3]

What I’m describing here is not a technical problem. It’s a matter of people getting together and making a decision to step forward and start building up something bigger and cooler together.

Kevin Dangoor[3]

In August 2009, the project was renamed CommonJS to show the broader applicability of the APIs.[4] Specifications are created and approved in an open process. A specification is only considered final after it has been finished by multiple implementations.[5] CommonJS is not affiliated with the Ecma International group TC39 working on ECMAScript, but some members of TC39 participate in the project.[6]

Specifications

The list of specifications includes:[7]

Current

  • Modules/1.0 (Superseded by Modules/1.1)
  • Modules/1.1
  • Modules/1.1.1
  • Packages/1.0
  • System/1.0

Proposals

The proposals cover much more than modules. They intend to define a set of APIs that are useful both for non-web JavaScript implementations, with standardized package names to provide interoperability within the ecosystem. This goal sometimes overlaps with that of TC39, and parts such as Promises have indeed made it into ECMAScript itself.

The part after the slash is the version. When a proposal is in contention, each individual proposal (including sequential revisions from the same author) is assigned a new letter. When the main direction is known it starts being assigned numeric versions.

  • Binary/B,F
  • Console (ported from Web)
  • Encodings/A,C
  • Encodings/A
  • HTTP Client/B
  • IO/A
  • Filesystem/A,A/0
  • Modules/Async/A
  • Modules/AsynchronousDefinition
  • Modules/LoaderPlugin
  • Modules/Resources
  • Modules/SimpleAsynchronous
  • Modules/Transport/B,C,D,E
  • Modules/Wrappings
  • Modules/Wrappings-Explicit-Dependencies
  • Packages/1.1
  • Packages/AsynchronousDefinition
  • Packages/Mappings/A,B,C,D
  • Promises/B,D
  • Unit Testing/B,1.0,1.0.1

Implementations

See also

References

  1. Eric Elliott (26 June 2014). Programming JavaScript Applications: Robust Web Architecture with Node, HTML5, and Modern JS Libraries. "O'Reilly Media, Inc.". pp. 87–. ISBN 978-1-4919-5027-2.
  2. Mario Casciaro; Luciano Mammino (29 July 2020). Node.js Design Patterns: Design and implement production-grade Node.js applications using proven patterns and techniques, 3rd Edition. Packt Publishing. p. 62. ISBN 978-1-83921-044-0.
  3. What Server Side JavaScript needs - Blue Sky On Mars
  4. CommonJS: JavaScript Standard Library
  5. ProposalProcess - CommonJS Spec Wiki
  6. CommonJS: the First Year - Blue Sky On Mars
  7. "JavaScript Standard Library". CommonJS. Archived from the original on 2014-05-28. Retrieved 2014-05-28.CS1 maint: unfit URL (link)
  8. olegp/common-node @ GitHub
  9. - GitHub
  10. DrBenton/CommonJSForPHP - GitHub
  11. Implementations/CouchDB - CommonJS Spec Wiki
  12. Flusspferd - CommonJS platform | Javascript bindings for C
  13. Implementations/GPSEE - CommonJS Spec Wiki
  14. Implementations/Smart - CommonJS Spec Wiki
  15. Homepage - JSBuild Archived 2011-01-04 at the Wayback Machine
  16. MongoDB
  17. Implementations/Narwhal - CommonJS Spec Wiki
  18. Implementations/node.js - CommonJS Spec Wiki
  19. Implementations/Persevere - CommonJS Spec Wiki
  20. pinf/loader-js - GitHub
  21. Implementations/RingoJS - CommonJS Spec Wiki
  22. "SilkJS WWW Site". Archived from the original on 2017-09-12. Retrieved 2012-10-19.
  23. Implementations/SproutCore - CommonJS Spec Wiki
  24. Implementations/TeaJS - CommonJS Spec Wiki
  25. Wakanda
  26. xuljet - XUL JavaScript Enhanced Toolkit - Google Project Hosting
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.