Registering a Package on Bower
Up until now I have only wanted to use me_map_reduce in Node.js, but today I wanted to use that functionality on a website too.
This proved to be a very easy exercise even though I have not done it before or even done any of the individual steps!
The instructions given on Bower.io tell me that:
- There must be a valid manifest JSON in the current working directory.
- Your package should use semver Git tags.
- Your package must be available at a Git endpoint (e.g., GitHub); remember to push your Git tags!
There must be a valid manifest JSON in the current working directory.
Starting right at the start, what is a manifest file... I try hitting
ctrl-f on the page and search for the word 'manifest' but that is the only reference. Doing some Googling I found an article on StackOverflow where the recommended answer tells that that I need a
bower.json file or a
component.json file and "Keep using
bower init, it'll do the right thing for you!". Searching on the page reveals that there is a section called "Defining a Package" referencing
bower.json and that Some of the Bower components I have installed already have a
bower.json. It seems that
bower.json is the manifest file, makes sense but it always pays to be sure.
bower init guides me through the following wizard:
$ bower init
[?] name: me_map_reduce
[?] version: 0.9.0
[?] description: MongoDB style Map/Reduce functionality for JS
[?] main file: lib/me_map_reduce.js
[?] keywords: map, reduce, map/reduce
[?] authors: Matthew Forrester <email@example.com>
[?] license: BSD-style
[?] homepage: https://github.com/forbesmyester/me_map_reduce
[?] set currently installed components as dependencies? Yes
[?] add commonly ignored files to ignore list? Yes
[?] would you like to mark this package as private which prevents it from being accidentally publis[?] would you like to mark this package as private which prevents it from being accidentally published to the registry? No
Your package should use semver Git tags.
A page describing Semver is helpfully hyperlinked from the Bower.io homepage and it seems to just be in the form
[MAJOR].[MINOR].[PATCH]. I elect to use version
0.9.0 because I cannot see myself ever added extra features to me_map_reduce but the code has probably got near zero use, so could have bugs and I'd not like to call potentially buggy code version 1.0.0.
How to create a Git Tag is referenced in the (Git Book)[http://git-scm.com/book/en/Git-Basics-Tagging] and is pretty easy. The example gives the command
git tag -a v1.4 -m 'my version 1.4 to create a tag, but that raises another question, does a semver tag include a 'v'... StackOverflow gives an answer which says they do not. So I commit my new
bower.json (created by
bower init) and then create the tag using the following command:
$ git tag -a 0.9.0 -m 'Version 0.9.0'
Your package must be available at a Git endpoint (e.g., GitHub); remember to push your Git tags!
I need to push my tag...
The Git Book tells me that to push a tag all I need to do is
git push origin [tagname] or
git push --tags to push all tags... I elect to push all my tags as it's first Tag I have ever created:
git push --tags
All Set - Time To Publish!
Jumping back to the Bower.io registering packages section it says that
bower register <my-package-name> <git-endpoint> will register my package. So...
$ bower register me_map_reduce firstname.lastname@example.org:forbesmyester/me_map_reduce.git
Testing my Bower package using
bower install --save me_map_reduce where I wanted to use the code installed me_map_reduce perfectly.