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而给出的指令给出了两个明确的命令,所以我在这里完全搞糊涂了。
直觉上我会猜测
-
npm install –save-dev package-name将等同于将package-name添加到我的package.json中
-
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-name
是npm i -D package-name
和npm install --save package-name
快捷方式npm install --save package-name
是npm i -S package-name
Npm和Bower都是依赖pipe理工具。 但两者之间的主要区别在于npm用于安装Node js模块,但是bower js用于pipe理像html,css,js等前端组件 。
一个令人困惑的事实是npm提供了一些可用于前端开发的软件包,比如grunt
和jshint
。
这些行增加更多的意义
与npm不同的是,Bower可以有多个被认为是主要文件的文件(例如.js,.css,.html,.png,.ttf)。 Bower在语义上将这些主要文件视为一个组件包装在一起。
编辑 : Grunt与Npm和Bower完全不同。 Grunt是一个JavaScript任务亚军工具。 你可以用grunt做很多事情,否则你必须手动做。 突出Grunt的一些用途:
- 压缩一些文件(例如zipup插件)
- Linting js文件(jshint)
- 编译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文件将不受影响。
你既可以做到这一点,也不会有实质性的差异。