Bower's Design and Its Time

Bower 80,366 came out of Twitter and was published to npm 2,036 in September 2012, when npm served Node.js 2,131 and front-end libraries were copied into js/vendor/ by hand. Its design fit the browser of the time: a flat list, because a page loads only one jQuery 561 ; packages fetched from Git 1,932 tags through a thin name-to-URL registry; a bower.json manifest; and files unpacked into bower_components/ for <script> tags. It still works.

Installing jQuery and Bootstrap 3 with Bower 1.8.14Shell
mkdir ~/v5-ch1/bower-demo && cd ~/v5-ch1/bower-demo
npm install --no-save bower@1.8.14
npx bower install jquery#3.7.1 bootstrap#3.4.1
Output
added 1 package in 9s
bower jquery#3.7.1              cached https://github.com/jquery/jquery-dist.git#3.7.1
bower bootstrap#3.4.1           cached https://github.com/twbs/bootstrap.git#3.4.1
bower jquery#1.9.1 - 3          cached https://github.com/jquery/jquery-dist.git#3.7.1
...
bootstrap#3.4.1 bower_components/bootstrap
└── jquery#3.7.1
jquery#3.7.1 bower_components/jquery

Each name resolved to a Git repository and tag, served here from Bower's cache (~/.cache/bower) after an earlier run; a first run downloads the tag's tarball from GitHub 29 . Bootstrap 3 2,007 asks for jQuery 1.9.1 - 3, and Bower validated that range against the one top-level copy, 3.7.1, instead of installing a second jQuery.