Creating Node packages in NPM

npm is the package manager for Node.js, the server-side JavaScript thingy. And it’s lovely. On a day-to-day basis, doing C#, I use NuGet in Visual Studio. While NuGet is a welcome addition to Visual Studio, npm seems to make it much easier to create and reuse packages. 

For instance, I’ve just pushed my parsing library, canto34, up to this location on npm, and the process was remarkably easy. The steps are –

1. create a user on the npm website.

2. Link your computer to it with npm command line;

npm adduser

 

3. Create a single file (package.json) which describes the package, its dependencies, and its location in git

4. Publish the package using npm again;

npm publish

And that’s it — package deployed. 

Now, that’s pretty sweet — anyone in the world can install the package using this command line;

npm install canto34

And get going with the library. But what about me? I want to continue to develop canto34 here on my dev machine, and use it in another project (in my case, a little program called Mettle that’s beginning to take shape.)

So I want to make changes to canto34 as I make changes to Mettle. I don’t want to have upload changes to canto34, and then download them in Mettle. I just want to develop both. 

npm lets you do this by CDing into canto34’s directory and typing

npm link

And then CDing into Mettle’s directory and typing

npm link canto34

Magic! npm ‘installs’ canto34 on my machine using a shortcut to my development copy, so that I now have this structure on my disk;

<src>/Mettle/node_modules/canto34

And I can now develop both projects together.

The thing here isn’t that the command line support is good — on its own, that’s pretty dull. The nice thing is now the npm system seems really well designed to get you sharing code, and doesn’t punish you for doing so. You can share libraries as open source, or use them in proprietary projects, or mix the two together, and it feels like npm is your buddy — a little like, I guess, an author feels about an editor; the technical guy that gets your artistry out to the world. 

All in all, a very good developer experience

 

Advertisements

Running jasmine tests using jasmine-node and autotest

I’ve just started using Jasmine-node on a project I’m starting to help people build recursive-descent parsers. Jasmine-node is a neat little tool, because it allows you to write a command line like this;

jasmine-node spec/ --autotest

And it’ll start a process which monitors your tests. As you save your tests (the .spec.js files), the tests are all re-run, and this makes for a really tight development cycle. As you save, without anything other than ctrl+s, your tests run. Beautiful, really — the fact the test is running without any interference means that you don’t even think about a code-run-test cycle — it’s just code-code-code. Neat.

Special thanks to Clare for helping me get the first few Jasmine tests written. That initial understanding is the thing that cracks open a lot of possibility.