User:Hashar/cli-js

Note taking mostly. Do not quote me on this stuff!

This page covers installing nodejs and qunit port under Mac OS X and GNU/Linux Debian.

new node-qunit edit

qunit-port is being refactored under github branch 'refactoring'. This include the original QUnit source code but require unstable NodeJS version > 0.5

Possible node modules prerequisites:

  • argsparser
  • bunker
  • cli-table
  • chainer
  • underscore
  • tracejs
  • jsdom
  • jquery

With home brew, to install them globally with all dependencies use:

$ npm-g install argsparser bunker cli-table chainer underscore tracejs jsdom jquery

More prerequisites might be needed.

nodejs 0.5.9 (homebrew) edit

As of October 18th, homebrew does not ship a NodeJS 0.5 version which is unstable.

NodeJS 0.5.7 and 0.5.8 is missing child_process.fork on Mac OS X 10.7.

You have to add a node-unstable node-unstable formula for this. The provided version come from a Github commit in bramswenson/homebrew fork. I have manually updated it to install version v0.5.9, thus you can add it to your homebrew formula with the command:

Grab the formula from github at https://gist.github.com/1295768 and add it as node-unstable.rb in your brew directory. You will then be able to install NodeJS 0.5.9. Then install that NodeJS using the downloaded formula:

$ brew install node-unstable

Note: you might want to uninstall the previous, stable, node installation with 'brew uninstall node'.

Once installed, make sure you have a v0.5.x node installed:

$ node --version
v0.5.9
$

Mac OS X install edit

prerequisites edit

Install language interpreters python 2.7 and node.js. On a Mac OS X Computer, it will be with the port command (see MacPorts):

$ sudo port install python2.7
$ sudo port install node  # got me node 0.4.8

Then install "Node Package Manager" (npm) with a small risk of getting hacked in the way:

# curl http://npmjs.org/install.sh | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3874  100  3874    0     0   8970      0 --:--:-- --:--:-- --:--:-- 13451
fetching: http://registry.npmjs.org/npm/-/npm-1.0.6.tgz
/tmp/npm.50407/package
0.4.8
1.0.6
prefix=/opt/local

This script will find and eliminate any shims, symbolic
links, and other cruft that was installed by npm 0.x.

Is this OK? enter 'yes' or 'no' 
yes  <--- enter 'yes' and press return :)

All clean!
! [ -d .git ] || git submodule update --init
node cli.js cache clean
node cli.js rm npm -g -f --loglevel error
node cli.js install -g -f
/opt/local/bin/npm -> /opt/local/lib/node_modules/npm/bin/npm.js
node-uuid@1.1.0 /opt/local/lib/node_modules/npm/node_modules/node-uuid
npm@1.0.6 /opt/local/lib/node_modules/npm
It worked
#

Then install node-qunit ( https://github.com/kof/node-qunit ) using the node package manager:

$ sudo npm install qunit

> qunit@0.1.5 install ~/node_modules/qunit
> make install

  ... output of ./configure && make && make install

argsparser@0.0.5 ./node_modules/qunit/node_modules/argsparser
uglify-js@1.0.2 ./node_modules/qunit/node_modules/sharedjs/node_modules/uglify-js
sharedjs@0.0.2 ./node_modules/qunit/node_modules/sharedjs
qunit@0.1.5 ./node_modules/qunit

setup profile and check installation edit

You should have something like:


$ sudo npm list
/path/to/home
└─┬ qunit@0.1.5 
  ├── argsparser@0.0.5 
  └─┬ sharedjs@0.0.2 
    └── uglify-js@1.0.2 
$

NPM actually install the requested modules under /path/to/home/node_modules/ and then use a symbolic link to publish the binary. The folder can be found by using npm bin:

$ npm bin
/path/to/home/node_modules/.bin
$

You might want to append that binary path to your PATH environment variable:

# node.js
NODE_PATH="/Users/hashar/node_modules"
export PATH=$PATH:"$NODE_PATH/.bin"

At this step, you should be ready to run qunit :

$ which qunit
/path/to/home/node_modules/.bin/qunit
$ qunit -h

Usage: cli [options] value (boolean value can be used)

...

Please use the -h switch when invoking qunit or it might just throw an exception.

Mac OS X (with homebrew) edit

$ brew install node
$ brew install npm

Make sure to update your NODE_PATH env variable in your .bashrc. Brew use /usr/local as a prefix, so you should add:

export NODE_PATH="/usr/local/lib/node_modules"

Then install the node module globally with npm-g (alias set up by homebrew):

$ npm-g install qunit

This will install the stable version. As of October 18th 2011, this mean using an outdated QUnit port which do not support stop(timeout) method.


GNU/Linux (Debian) edit

As of July 2011, you have to use unstable release to install node and npm. You can backport unstable packages in your testing release by adding unstable in your /etc/apt/sources.list and updating your /etc/apt/preferences:

/etc/apt/sources.list

# Please note the URL http://ftp.free.fr/mirrors/ftp.debian.org/ might be different
# for your local setup. The important thing is adding a line with 'unstable' :)
 
# Testing source list:
deb http://ftp.free.fr/mirrors/ftp.debian.org/ testing main contrib non-free
# Unstable source list:
deb http://ftp.free.fr/mirrors/ftp.debian.org/ unstable main contrib non-free

/etc/apt/preferences

Package: *
Pin: release a=testing
Pin-Priority: 900

Package: *
Pin: release o=debian
Pin-Priority: -10

Then update using apt-get update and install the package with the target unstable:

 $ apt-get install -t unstable nodejs npm

Debian should take care of everything for you. Then install qunit:

$ npm install qunit
 <snip>
$

Debian install symbolic links in your ~/bin . Make sure it is in your PATH. You will end up with something like:

$ ls -l ~/bin/qunit*
lrwxrwxrwx 1 hashar hashar  13 16 juil. 19:46 /home/hashar/bin/qunit -> ./qunit@0.1.5*
-rwxr-xr-x 1 hashar hashar 708 16 juil. 19:46 /home/hashar/bin/qunit@0.1.5*
$

Jquery and DOM edit

Install Jquery and a javascript DOM for node is really easy, using the Node Package Manager of course!

jQuery for node:

$ npm install jquery
htmlparser@1.7.3 ./node_modules/jquery/node_modules/htmlparser
mjsunit.runner@0.1.3 ./node_modules/jquery/node_modules/jsdom/node_modules/mjsunit.runner
request@1.9.5 ./node_modules/jquery/node_modules/jsdom/node_modules/request
jsdom@0.1.20 ./node_modules/jquery/node_modules/jsdom
jquery@1.5.1 ./node_modules/jquery
$

DOM in node:

$ npm install jsdom
request@1.9.5 ./node_modules/jsdom/node_modules/request
htmlparser@1.7.3 ./node_modules/jsdom/node_modules/htmlparser
jsdom@0.2.0 ./node_modules/jsdom
$

Verifying install edit

We will do the first node run and verify jQuery and DOM seems fine.

Create a JavaScript file with the following content (From https://github.com/coolaj86/node-jquery) :

var jsdom = require( 'jsdom' ).jsdom,
    newWindow = jsdom().createWindow(),
    $ = require( 'jquery' ),
    jQuery = require( 'jquery' ).create( newWindow );

$("<h1>test passes</h1>").appendTo("body");
console.log( $("body").html()  )

Then run the above code using node:

$ node qunit_start.js 
<h1>test passes</h1>
$

Congratulations! You have everything needed :-)