Para iniciar um módulo ou projeto utiliza-se o comando npm init.
Instalar todas as dependências do projeto utiliza-se o comando npm install.
Para instalar um módulo utiliza-se o comando npm install <module> ou npm install <module> --save .
Utiliza-se NodeJS para criar tarefas automatizadas que anteriormente poderia ser escritas em shell script.
Para rodar uma aplicação em Node.js basta iniciar o servidor. Após cada alteração do arquivo é necessário reiniciar a aplicação.
Para automatizar este processo utiliza-se o nodemon que pode ser instalado através do comando npm install nodemon -g.
O Node.js possui um debugger nativo acessível via linha de comando. Ele é um pouco complexo e quase ninguém usa.
É recomendável delegar o processo de debugger a uma ferramenta terceira.
A natureza assíncrona do JavaScript torna alguns testes mais difíceis de escrever.
Usa-se callback e promises para resolver o problema.
Existem várias ferramentas de testes para Node.js. Atualmente a mais utilizada é o Mocha.
Existem ferramentas para testes de unidade, integrados ou de aceitação.
Existem várias IDEs e editores para desenvolver em Node.js ou JavaScript como WebStorm, VIM, Sublime Text e fluxo de trabalho envolve algumas janelas de terminais abertas.
Recomenda-se utilizar um automatizador de tarefas para tarefas que são executadas com frequência como build, deploy, testes, compilação entre outros.
As principais ferramentas de automatização de tarefas são o Grunt (mais conhecido e utilizado) e o Gulp (mais novo e com versões inovadoras).
Recomenda-se não versionar o diretório node_modules ou dependências.
Se precisar saber exatamente o que rodar utiliza-se o comando npm shinkwrap.
Recomenda-se não versionar pacotes de front-end, este tarefa deve ser delegada ao Bower.
Recomenda-se também não versionar o JavaScript gerado por transpilers.
Para rodar o Node.js em produção é necessário levar em consideração:
o Node.js não é multi-thread então deve-se utilizar várias instâncias
o gerenciamento é um pouco complexo e utiliza-se ferramentas para o gerenciamento
Ele é independente do servidor web
Alguns mitos de como o Node.js não escala é refutado observando sua utilização nas empresas.
Recomenda-se não fazer coisas que dependam de alto uso de CPU.
Pode-se utilizar várias linguagens CoffeeScript, TypeScript e Clojure.
O NodeJS utiliza threads não-bloqueantes e isso é muito bom para o desempenho como em aplicações realtime, por exemplo.