Grunt,NPM和Bower之间的区别(package.json与bower.json)

我是使用npm和bower的新手,在emberjs中构建了我的第一个应用程序:)。
我确实有一些关于Rails的经验,所以我熟悉用于列出依赖项的文件(例如捆绑程序Gemfile)的概念

问:当我想添加一个包(并检查依赖性进入GIT),在那里它属于-成package.json或成bower.json

根据我的收集,
运行bower install将获取包并将其放入/vendor目录,
运行npm install将获取它并将其放入/node_modules目录。

这样的回答说bower是用于前端的,而npm是用于后端的。乍一看,
Ember-app-kit似乎坚持了这种区别...但是gruntfile中的用于启用某些功能的指令给出了两个显式命令,因此我在这里完全感到困惑。

凭直觉我会猜到

  1. npm install --save-dev软件包名称等同于将软件包名称添加到我的package.json中

  2. bower install --save软件包名称可能与将软件包添加到我的bower.json并运行bower install相同

如果是这样,我什么时候应该显式安装软件包而不将其添加到管理依赖项的文件中(除了全局安装命令行工具之外)?