Eduardo Garcia bio photo


Eduardo Garcia

Knowmad by definition

Location: Costa Rica

Twitter Facebook  QQ交谈 Google+ Github LinkedIn Feed

If we want to enable people to use our libraries via Bower we need to follow some simple steps.

  • Add a bower.json files to our project.
  • Create a release matching the info in our bower file.
  • Run bower register command to share our project.

The Problem

The problem I found is the publishing process don't validate the bower.json, so is probable after publish when people try to use your library even if the system detect the library is available they get an awful error like this

bower backform#~0.0.1-alpha EMALFORMED Failed to read /var/folders/bh/8fr0bx9113n0plkjjkt2s5d40000gn/T/enzo/bower/backform-20375-ST4wT6/bower.json

Additional error details:
Unexpected token n

The solution.

Fortunately there is a Node.js package to validate the bower.json before to publish.

We need to install the package with the following command.

$ npm install bower-json

Execute this command inside the folder of your library or use the option -g to install globally is up to you.

Now we will use the following Node.js scrit to validate the bower.json file, let name this script as check_bower.js

var bowerJson = require('bower-json');

// Can also be used by simply calling bowerJson()'./bower.json', function (err, json) {
    if (err) {
        console.error('There was an error reading the file');

    console.log('JSON: ', json);

To use this script execute the following command.

$ node check_bower.js

As you can imagine you will get the same error in the first execution, so you need to work in your file until you get an output similar to this

JSON:  { name: 'backform',
  main: [ 'src/backform.js' ],
  version: '0.0.1-alpha',
  homepage: '',
  author: { name: 'Martin Drapeau', email: '' },
  description: 'Backform takes a Backbone model and transforms it into an HTML form',
  keywords: [ 'backbone', 'form', 'underscore' ],
  license: 'MIT',
  ignore: [ '**/.*', 'node_modules', 'bower_components', 'test', 'tests' ],
  dependencies: { backbone: '1.0.0 - 1.1.2', underscore: '1.4.4 - 1.6.0' } }

You can see a bower file sample at

Last but not least important use the documentation about what elements must be used in a a bower.json to be valid.

Readers Contribution

One of my readers Josh Habdas recommend also the tool Package.json validator to validate before to send.

I hope you found this blog entry useful.


comments powered by Disqus