В каком случаи использовать --save и --save-dev в NPM?
Компиляторы-транспиляторы-трансляторы (типа Coffee, LESS, Jade), тест-раннеры, стайл-чекеры и линтеры (mocha, chai, karma, (js|es)lint, jscs), плагины для таск-раннеров (grunt-contrib-watch, gulp-jade) — все это обычно ставится как --save-dev, потому что нужно только тем, кто контрибьютит в этот проект, работает с его кодом.
Библиотеки и фреймворки (expressjs, jquery, backbone), на основе которых работает ваш код, без которых ваш код не запустится у его потребителя — ставятся как --save.
Если Вы хотите, чтобы npm модифицировал зависимости в package.json, а зависимости, как известно, делятся на основные (dependencies) и для разработки (devDependencies). Зависимости для разработки ставятся через npm install packageName --dev, и это используется для автоматизированного тестирования, сборок и т.д.