## Javascript Development on the Command Line

From: andrew cooke <andrew@...>

Date: Fri, 17 Feb 2012 20:19:21 -0300

I am trying to get started with Javascript on the command line.  I want to
write a "significant" amount of code, and so thought maybe I should be trying
to develop using nodejs to run tests etc (even though the code will finally
run in a browser).

But I am having a hard time finding good, introductory information on how to
do this, so decided to write some notes here in case they might help others.

This is where I am: I can define modules and run tests.  In addition, I am
using requirejs to load modules, which I believe will carry across to working
in the browser - http://requirejs.org/

This is what I did:

- Add the nodejs plugin to Intellij Idea (most of what is described here is
independent of using Intellij Idea, but if you use it, you need this).

- Install nodejs and npm (for OpenSuse the nodejs package installs both).

- npm is the node package manager and works something like easy_install for
Python.  You can install files globally, but it seems more sensible to run
it locally in the project directory).  If you do that (as I do here) you
need to add the file node_modules/.bin to your path (where node_modules is
a directory that will appear when you run npm below).

- Create you project directory.

- In that directoryUsing npm install the libraries you want:
npm install underscore
npm install requirejs
npm install benchmark
npm install nodeunit
npm install amdefine
npm install assert

- Also create src and test subdirectories.

- In the src directory create a file called utils.js (for example).  This is
your first module.  The contents are (for example):

if (typeof define !== 'function') {
var define = require('amdefine')(module);
}

define(['underscore'], function () {

"use strict";

if ('function' !== typeof Object.beget) {
Object.beget = function (o) {
var f = function () {
};
f.prototype = o;
return new f();
};
}

});

where the first three lines are described at
http://requirejs.org/docs/node.html#nodeModules and the next block defines
your module (which unusually doesn't have any contents, but does make
global changes to Javascript).

- In the test directory create file called utils.js (for example) with your
tests:

if (typeof define !== 'function') {
var define = require('amdefine')(module);
}

define(['underscore'], function () {

"use strict";

return {
test1: function(test) {
test.equals(1,1);
test.done();
}
}

});

where I am using nodeunit because it is supported by Intellij.
Alternatively, you could use mocha.  For that case see my question here
http://stackoverflow.com/questions/9303945

- With that you can now test from the command line (don't forget to cmodify
PATH as described above:

> nodeunit test

utils.js
/ test1

OK: 1 assertions (14ms)

where I've replace a cute tick mark with a "/" that is more likely to
display on my antique blog.

- Alternatively, you can run the tests in Intellij.  Go to "Edit
configurations" and add a nodeunit config.  Note that there is a strange
bug - if you select the files from the file selector then you need to make
the path in the last textbox relative (delete the leftmost part of the
path).  See http://youtrack.jetbrains.com/issue/IDEA-81566

OK, that's as far as I have got.

Andrew