JavaScript has become a language for programming complex Web applications, whose logic is deployed across both Web browsers and Web servers. Current software packaging mechanisms for JavaScript enable a basic level of modularity and reuse. However, they have not yet reached full maturity in terms of enabling system extensions with features contributed as third-party plugins, while encapsulating them adequately. In this paper we present a novel plugin system for JavaScript applications, which integrate Node.js modules with HTML5 Web Components. It provides abstractions for: real time and loosely coupled communication between front-end and back-end components, persistent state storage, and isomorphic usage of JavaScript. Plugins can use hooks and events to contribute functionality and embed it into the main application flow, while respecting the common asynchronous non-blocking programming paradigm of JavaScript. We demonstrate the expressiveness of the framework as it is used to build ASQ: an open, extensible educational Web platform.
[1]
Franz Schweiggert,et al.
Lightweight Plug-In-Based Application Development
,
2002,
NetObjectDays.
[2]
Costas Gabrielatos,et al.
Corpora and language teaching: Just a fling, or wedding bells?
,
2005
.
[3]
Cesare Pautasso,et al.
Interactive Scalable Lectures with ASQ
,
2014,
ICWE.
[4]
Wire
,
2021,
Encyclopedic Dictionary of Archaeology.
[5]
Cesare Pautasso,et al.
TigerQuoll: parallel event-based JavaScript
,
2013,
PPoPP '13.
[6]
Arie van Deursen,et al.
A component- and push-based architectural style for ajax applications
,
2008,
J. Syst. Softw..
[7]
최욱.
[Architect] 하우스 엔
,
2003
.
[8]
Adam Onishi.
Plugins: When the Time Is Right
,
2013
.
[9]
Cesare Pautasso,et al.
Towards Liquid Web Applications
,
2015,
ICWE.