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

我是新来的使用npm和鲍尔,build立我的第一个应用程序在emberjs :)。
我有一些使用rails的经验,所以我很熟悉列出依赖关系的文件(比如bundler Gemfile)

问题:当我想添加一个包(并检查依赖到git中),它属于哪里 – 进入package.json或进入bower.json

从我收集的信息来看,
运行bower install会取出包并放在/vendor目录下,
运行npm install它将获取它并把它放到/node_modules目录中。

这回答说,鲍尔是前端和npm是后端的东西。
Ember-app-kit似乎从第一眼就坚持了这个区别…但是gruntfile中为了启用某些function而给出的指令给出了两个明确的命令,所以我在这里完全搞糊涂了。

直觉上我会猜测

  1. npm install –save-dev package-name将等同于将package-name添加到我的package.json中

  2. bower install –save package-name可能与将包添加到我的bower.json并运行bower install相同

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

2016年中更新

事情变化如此之快,如果到2017年底,这个答案可能不会是最新的了!

初学者可能很快就会在构build工具和工作stream程的select上迷失方向,但2016年最新的版本根本不使用Bower,Grunt或Gulp! 在Webpack的帮助下,您可以直接在NPM中做所有事情!

  • Google“npm as build tool”结果: https : //medium.com/@dabit3/introduction-to-using-npm-as-a-build-tool-b41076f488b0#.c33e74tsa

  • Webpack: https ://webpack.github.io/docs/installation.html

不要误解我的意思,人们使用其他工作stream程,我仍然在我的遗留项目中使用GULP(但是慢慢地移除它),但是这是最好的公司做的,开发这个工作stream程的开发者赚了很多钱!

看看这个模板,它是一个非常先进的设置,包括最好的和最新的技术的混合: https : //github.com/coryhouse/react-slingshot

  • 的WebPack
  • NPM作为构build工具(不是Gulp,Grunt或Bower)
  • 与Redux反应
  • ESLint
  • 名单很长。 去探索!

你的问题:

当我想添加一个包(并检查依赖到git),它属于哪里 – 进入package.json或进入bower.json

  • 现在一切都属于package.json

  • 编译所需的依赖关系在“devDependencies”中,即npm install require-dir --save-dev (–save-dev通过向devDependencies添加一个条目来更新你的package.json)

  • 在运行时你的应用程序所需的依赖关系在“依赖关系”,即npm install lodash --save ( – 通过向依赖关系添加条目来更新你的package.json)

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

总是 只是因为舒适。 当您添加一个标志( --save-dev--save )时,pipe理deps(package.json)的文件会自动更新。 不要通过手动编辑依赖关系来浪费时间。 npm install --save-dev package-name快捷方式npm install --save-dev package-namenpm i -D package-namenpm install --save package-name快捷方式npm install --save package-namenpm i -S package-name

Npm和Bower都是依赖pipe理工具。 但两者之间的主要区别在于npm用于安装Node js模块,但是bower js用于pipe理像html,css,js等前端组件

一个令人困惑的事实是npm提供了一些可用于前端开发的软件包,比如gruntjshint

这些行增加更多的意义

与npm不同的是,Bower可以有多个被认为是主要文件的文件(例如.js,.css,.html,.png,.ttf)。 Bower在语义上将这些主要文件视为一个组件包装在一起。

编辑Grunt与Npm和Bower完全不同。 Grunt是一个JavaScript任务亚军工具。 你可以用grunt做很多事情,否则你必须手动做。 突出Grunt的一些用途:

  1. 压缩一些文件(例如zipup插件)
  2. Linting js文件(jshint)
  3. 编译less量文件(grunt-contrib-less)

有杂音插件sass编译,uglifying你的JavaScript,复制文件/文件夹,缩小JavaScript等

请注意,grunt插件也是一个npm包。

问题1

当我想添加一个包(并检查到git的依赖),它属于哪里 – 进入package.json或进入bower.json

这真的取决于这个软件包属于哪里。 如果它是一个节点模块(如grunt,request),那么它将在package.json中进入,否则进入到bower json中。

问题2

我应该什么时候安装软件包,而不是将它们添加到pipe理依赖关系的文件中

无论您是明确安装软件包还是在.json文件中提到依赖关系,都无关紧要。 假设您正在处理一个节点项目,并且需要另一个项目,比如request ,那么您有两个select:

  • 编辑package.json文件并添加对'request'的依赖
  • npm安装

要么

  • 使用命令行: npm install --save request

--save选项也将依赖项添加到package.json文件中。 如果你没有指定--save选项,它只会下载包,但json文件将不受影响。

你既可以做到这一点,也不会有实质性的差异。