mopidy/js
Paul Connolley 418e5689dc Preliminary commit for browserify compatibility
This is the first stage of my commits for issue #609 that will make the
npm module browserify friendly and browser friendly.

The grunt-browserify module has been introduced to replace
grunt-contrib-concat. Browserify automatically concatenates files and so
there is no need for a concat step.

The faye-websocket module was problematic so I moved the require out to
a separate module within the lib directory. The websocket module is a
folder containing a package.json, directing library consumers to the
entry point that is appropriate for their environment. Browserify picks
browser.js (which simply returns an object holding window.WebSocket)
while everyone else gets the faye-websocket module.

In addition, as browserify handles all the requires, there's no need to
detect the environment or include any pre-built modules. I've removed
the pre-built when and faye-websocket files in favour of letting
browserify use the modules within node_modules. This should make it
easier to maintain dependencies in future versions of this library.

One side effect of this browserify compatibility is that, in order to
allow the library to be globally available in the browser as `Mopidy`,
I've had to set Mopidy as the exported object instead of as a key of the
exported object. To elaborate further, the current API would be like the
following:

    var Mopidy = require('mopidy').Mopidy;

However, with this change, the API would be like this:

    var Mopidy = require('mopidy');

I'm not sure whether this would be an issue and so I think it's worth
discussing further. It's possible that node developers won't have a
problem but, if they did, a potential workaround within the mopidy.js
file would be:

   Mopidy.Mopidy = Mopidy;

This would allow developers to choose either of the following:

    var Mopidy = require('mopidy');
    var Mopidy = require('mopidy').Mopidy;

Could be a little odd to do this though

When testing the browserify build, I noticed a strange error thrown when
making the initial websocket connection. I managed to track it down to
an IE 'feature' that crops up when you alias in-built functions. In
particular, the when module was aliasing setImmediate to an internal
function (nextTick.) In a newer version of when, the function is
instead aliased to the browserify process.nextTick. This works well
because substack already had that covered.

With when@2.7.0, IE11 appears to be working well. IE10 is still pending
a test.
2013-12-15 01:52:24 +00:00
..
lib Preliminary commit for browserify compatibility 2013-12-15 01:52:24 +00:00
src Preliminary commit for browserify compatibility 2013-12-15 01:52:24 +00:00
test js: Upgrade when.js from 1.8.1 to 2.0.0 2013-03-31 14:09:32 +02:00
buster.js js: Upgrade when.js from 1.8.1 to 2.0.0 2013-03-31 14:09:32 +02:00
Gruntfile.js Preliminary commit for browserify compatibility 2013-12-15 01:52:24 +00:00
package.json Preliminary commit for browserify compatibility 2013-12-15 01:52:24 +00:00
README.md docs: nodejs deb now includes npm 2013-08-04 11:24:00 +02:00

Mopidy.js

Mopidy.js is a JavaScript library that is installed as a part of Mopidy's HTTP frontend or from npm. The library makes Mopidy's core API available from the browser or a Node.js environment, using JSON-RPC messages over a WebSocket to communicate with Mopidy.

Getting it for browser use

Regular and minified versions of Mopidy.js, ready for use, is installed together with Mopidy. When the HTTP frontend is running, the files are available at:

You may need to adjust hostname and port for your local setup.

In the source repo, you can find the files at:

  • mopidy/frontends/http/data/mopidy.js
  • mopidy/frontends/http/data/mopidy.min.js

Getting it for Node.js use

If you want to use Mopidy.js from Node.js instead of a browser, you can install Mopidy.js using npm:

npm install mopidy

After npm completes, you can import Mopidy.js using require():

var Mopidy = require("mopidy").Mopidy;

Using the library

See Mopidy's HTTP API documentation.

Building from source

  1. Install Node.js and npm. There is a PPA if you're running Ubuntu:

     sudo apt-get install python-software-properties
     sudo add-apt-repository ppa:chris-lea/node.js
     sudo apt-get update
     sudo apt-get install nodejs
    
  2. Enter the js/ in Mopidy's Git repo dir and install all dependencies:

     cd js/
     npm install
    

That's it.

You can now run the tests:

npm test

To run tests automatically when you save a file:

npm start

To run tests, concatenate, minify the source, and update the JavaScript files in mopidy/frontends/http/data/:

npm run-script build

To run other grunt targets which isn't predefined in package.json and thus isn't available through npm run-script:

PATH=./node_modules/.bin:$PATH grunt foo