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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Grunt,NPM和Bower之间的区别(package.json vs bower.json)相关的知识,希望对你有一定的参考价值。

我是新手使用npm和bower,在emberjs中构建我的第一个应用程序:)。 我对rails有一些经验,所以我对列出依赖项的文件的想法很熟悉(例如bundler Gemfile)

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

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

This SO answer说bower用于前端,npm用于后端。 Ember-app-kit似乎从第一眼就坚持这种区别......但是gruntfile中enabling some functionality的指令给出了两个明确的命令,所以我在这里完全糊涂了。

直觉我会猜到

  1. npm install --save-dev package-name相当于将package-name添加到我的package.json中
  2. bower install --save package-name可能与将包添加到我的bower.json并运行bower install相同?

如果是这种情况,我什么时候应该像这样明确地安装软件包而不将它们添加到管理依赖项的文件中(除了全局安装命令行工具)?

答案

2016年中期更新:

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

初学者可以快速迷失在构建工具和工作流程的选择上,但2016年最新的是不使用Bower,Grunt或Gulp!在Webpack的帮助下,您可以直接在NPM中完成所有工作!

不要误会我的人使用其他工作流程,我仍然在我的遗留项目中使用GULP(但是慢慢地离开它),但这就是在最好的公司中完成的工作,在这个工作流程中工作的开发人员赚了很多钱!

看看这个模板,这是一个由最新技术和最新技术组合而成的最新设置:https://github.com/coryhouse/react-slingshot

  • 的WebPack
  • NPM作为构建工具(没有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(--save通过向依赖项添加条目来更新package.json)

如果是这种情况,我什么时候应该像这样明确地安装软件包而不将它们添加到管理依赖项的文件中(除了全局安装命令行工具)?

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

另一答案

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

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

这些行增加了更多含义

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

编辑:Grunt与Npm和Bower完全不同。 Grunt是一个javascript任务运行器工具。你可以使用grunt做很多事情,否则你必须手动完成。强调Grunt的一些用法:

  1. 压缩一些文件(例如zipup插件)
  2. Lins on js files(jshint)
  3. 编译较少的文件(grunt-contrib-less)

有sass编译的grunt插件,uglifying你的javascript,复制文件/文件夹,缩小javascript等。

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

问题1

当我想添加一个包(并将依赖项检入git),它在哪里 - 属于package.json或bower.json

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

问题2

什么时候我应该像这样明确地安装包而不将它们添加到管理依赖项的文件中

无论是显式安装包还是提及.json文件中的依赖项都无关紧要。假设您正在处理节点项目,并且需要另一个项目,比如request,那么您有两个选择:

  • 编辑package.json文件并在'request'上添加依赖项
  • npm安装

要么

  • 使用命令行:qazxsw poi

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

你可以这样做,不会有实质性的区别。

以上是关于Grunt,NPM和Bower之间的区别(package.json vs bower.json)的主要内容,如果未能解决你的问题,请参考以下文章

npm、bower、gulp、Yeoman 和 grunt 有啥用?

使用 grunt 自动化 npm 和 bower 安装

Grunt、Gulp.js 和 Bower 有啥区别?为啥以及何时使用它们?

npm,bower,gulp,Yeoman和grunt有什么好处?

npm 和bower之间的区别

sh 系统,Git,Git LFS,NPM,Grunt,Bower和ngrok的bash函数和别名