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



我是一名后端开发人员,对npm,bower,gulp,grunt和Yeoman有点困惑。每当我问某人他们的目的是什么时,答案往往归结为依赖管理器 - 对于他们所有人。当然,我们不需要四种不同的工具都做同样的事情吗?

有人可以用尽可能少的句子解释这些中的每一个有什么好处 - 如果可能的话,每个工具只有一个,使用一个五岁的孩子(具有开发技能)可以理解的语言?

例如:

  • SVN存储、管理和跟踪源代码的更改

我过去使用过maven,Jenkins,nexus和ant;也许您可以将上面的工具与这些工具进行比较?

也可以随意将其他前端工具添加到列表中。

这是我到目前为止发现的 - 不过不确定它是否正确:

  • 用于前端开发/JS库的bower依赖管理器,使用平面依赖列表
  • npm 依赖项管理器的 node.js 服务器,可以解析传递依赖项/依赖项树
  • grunt 运行任务,很像 Jenkins,但在命令行上是局部性的
  • 约曼提供脚手架,即骨架项目
  • gulp 与 grunt 相同,但仅用 js 编写
  • 节点.js JS应用程序的服务器?
  • git 去中心化 SCM/VCS,与 SVN/CVS 相对应

我接近了吗?:)

你很接近!欢迎来到 JavaScript :)

让我给你一个简短的描述和一个大多数开发人员花一些时间使用的功能。

凉亭重点介绍在浏览器中使用的包。每个bower install <packagename>都指向一个要包含的文件(可以下载更多文件)。由于 webpack、browserify 和 babel 的成功,它作为第一类依赖管理器大多已经过时了。

2018年更新:bower大部分被弃用,取而代之的是NPM

新人掌历史上专注于 NodeJS 代码,但已经推翻了浏览器模块的 bower。不要让任何人欺骗你:NPM是巨大的。NPM 还会将许多文件加载到您的项目中,全新的 npm 安装始终是冲泡一杯新咖啡的好理由。NPM 易于使用,但由于引用版本的松散方式和模块发布的任意性,在更改环境时可能会破坏您的应用程序。研究收缩包装和npm install --save-exact

2018年更新:NPM长大了!在安全性和可重复性方面已经实施了很多改进。

咕噜促进任务自动化。大口大口地吃着哥哥,有点迟钝。JavaScript 社区在 2014 年经常和他一起出去玩。在某些地方,Grunt 已经被认为是遗产,但仍有大量真正强大的自动化功能可供发现。对于较大的用例,配置可能是一场噩梦。不过有一个咕噜咕噜的模块。

2018年更新:咕噜声大多已经过时了。易于编写的 webpack 配置已经杀死了它。

吞掉做与咕噜声相同的事情,但更快。

npm 运行脚本您可能根本不需要任务运行程序。NodeJS 脚本非常容易编写,因此大多数用例都允许自定义任务自动化工作流程。使用 npm 运行脚本从 package.json 文件的上下文中运行脚本

网络包不要错过网络包。特别是如果你对将JavaScript编写成连贯的模块化代码的多种方法感到迷茫。Webpack 将.js文件打包到模块中,并且做得非常出色。Webpack 是高度可扩展的,也提供了一个良好的开发环境:webpack-dev-server与 babel 结合使用,以获得迄今为止最好的 JavaScript 体验。

自耕农脚手架。对于具有不同背景的团队来说非常有价值,因为它为您的项目架构提供了可控的共同基础。甚至还有一个脚手架的脚手架。

因此,既然您很清楚每个是什么,我将为您提供一个简单的工作流程。

  1. 我用 yeoman 搭建一个基本的骨架。
  2. 我正在使用节点作为我的应用程序的运行时。 即运行node appname
  3. 我使用 npm 安装节点模块以帮助我在节点中编写应用程序
  4. 我可能需要来自 bower 的一些组件,例如前端库,因此请使用 bower 来获取这些组件。
  5. 现在要做一些重复性的任务,我将使用grunt或gulp来编写一些任务。所以每次我想重复它时,说最小化我称之为 grunt/gulp 的 js 文件并让他们这样做。你问的不同之处在于,Gulp 是基于流的,而 grunt 是基于任务的。
  6. 我使用 git 进行版本控制以跟踪更改
    Gulp vs Grunt
  1. :Gulp 通过任务自动化提供了更大的灵活性,Grunt 根据常见的开发实践内置了许多功能。Grunt 和 Gulp 之间有两个主要区别:

    • Grunt 专注于配置,而 Gulp 专注于代码
    • Grunt 是围绕一组内置的、常用的任务构建的,而 Gulp 的想法是什么都不执行,而是社区开发的微任务应该如何相互连接 阅读这里

  1. NodeJS:它是一种非阻塞服务器端脚本语言。这意味着在当前操作完成之前,操作不会阻止进一步执行。

  1. Git:正如你提到的,它是一个SCM工具,一个广泛使用的工具。根据GitHub文档,它与其他SCM工具不同,因为数据永远不会被删除。

    Git 认为它的数据更像是一个迷你文件系统的一组快照。每次提交或在 Git 中保存项目状态时,它基本上都会拍摄您当时所有文件的外观,并存储对该快照的引用。

    在 Git 中执行操作时,几乎所有操作都只向 Git 数据库添加数据。很难让系统执行任何不可撤消的操作或使其以任何方式擦除数据。与任何 VCS 一样,您可能会丢失或弄乱尚未提交的更改;但是在将快照提交到 Git 后,很难丢失,尤其是当您定期将数据库推送到另一个存储库时。

    阅读更多


    Bower vs NPM:Bower
  1. 和 NPM 是依赖管理器,但 Bower 模块用于前端开发。NPM 是与 NodeJS 后端一起使用的大量模块集合。这个SO答案更好地涵盖了它

我添加了一些细节:

npm 是 JavaScript 的包管理器,npm 是 Nodejs 的包生态系统,但它只能用于前端项目。

Grunt & Gulp 对于分离和自动化任务很有用,例如在命令行上进行缩小、编译、单元测试,这是一种比(例如)Visual Studio 更轻的解决方案,因为该过程只是一个单独的(通常是轻量级的)命令行/进程。

关于gulp,gruntbower之间的区别,已经有一张票:Grunt,Gulp和Bower之间有什么区别.js?为什么以及何时使用它们?

Nodejs更像是一个JavaScript运行时。Node.js允许使用js和处理各种核心功能和其他核心功能的"模块"集合来创建Web服务器和网络工具。源

这张票证延续了 Git 和 Subversion 的区别:为什么 Git 比 Subversion 好?

最新更新