I’ve decided to learn about node.js - it’s about time, really. I’ve used it - but only so much as to run a grunt task to bundle a specific revision of an Angular directive.
I found this neat tutorial for picking up some node.js know-how - looks pretty decent, and I’ll give feedback on that in a subsequent post. Meanwhile, here’s a rundown of getting the basic environment up for those on Windows who are having issues (as I did)
Installing NodeJS with NPM
I must have had this idea a little while ago, because I thought my first step should be to find out what I’ve got installed so far - it turns out I have 2 versions installed from Chocolatey, and one from the official installer, all old versions. So I got rid of them all, and discovered from the helpful comments at the package page for nodejs that I should use nodejs.install instead.
c:\Development\node-learning>node -v v0.10.28 c:\Development\node-learning>npm -v 1.4.9
Installing express proved difficult - the mime package kept giving me permission errors and this:
npm ERR! Error: ENOENT, chmod 'C:\Users\*****\AppData\Roaming\npm\node_modules\express\node_modules\accepts\node_modules\mime\README.md'
Whatever that means.
I tried these (alongside an
npm uninst -g for everything to get a clean start), and it worked a treat. I then removed all the modules again, cleaned my cache,
and tried again, to make sure my solution was valid.
npm ERR! EEXIST, mkdir 'C:\Users\*****\AppData\Roaming\npm\node_modules\express\node_modules\send\node_modules\mime' File exists: C:\Users\*****\AppData\Roaming\npm\node_modules\express\node_modules\send\node_modules\mime Move it away, and try again.
It wasn’t. I’ve made sure
%appdata%/npm-cache is empty as well, to no avail. I sometimes get a few other errors, which seem to cycle around - even though the cache
and modules are empty
npm ERR! Error: ENOENT, chmod 'C:\Users\*****\AppData\Roaming\npm\node_modules\express\node_modules\type-is\node_modules\mime\LICENSE' npm ERR! Error: ENOENT, lstat 'C:\Users\*****\AppData\Roaming\npm\node_modules\express\node_modules\send\node_modules\mime\types\mime.types'
I’m sure I got an
EPERM here as well.
I’ve since learned that
ENOENT means “No such file or directory”. I’m well into yak-shaving territory at this point.
In the end, I just kept running
npm install express -g until it worked. It’s intermittent, which makes me think this stuff installs in parallel or there’s a load balancer
serving the wrong file or something. Not much of a light, but them’s the breaks.
npm install for the package had similar issues. As before the “keep on trying” Method works, and works in fewer iterations if you install
it package-at-a-time. I couldn’t find any documentation about parallel installs, so I’ve no idea what’s going on.
Be sure to let me know if you know what’s going on here!
In any case, it was easy sailing from here on out. The tutorial was straight forward, though it reminded me of my PHP days (jam the DB object into the request object? Really?)