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.
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.1added 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.