草庐IT

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

coder 2023-04-23 原文

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

问题:当我想添加一个包(并将依赖项 checkin git)时,它属于哪里 - 到 package.jsonbower.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.json 中

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

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

最佳答案

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

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

这些行增加了更多意义

Bower, unlike npm, can have multiple files (e.g. .js, .css, .html, .png, .ttf) which are considered the main file(s). Bower semantically considers these main files, when packaged together, a component.

Edit:Grunt 与 Npm 和 Bower 完全不同。 Grunt 是一个 javascript 任务运行工具。您可以使用 grunt 做很多事情,否则您必须手动完成。重点介绍 Grunt 的一些用途:

  1. 压缩一些文件(例如 zipup 插件)
  2. 对 js 文件进行 Linting (jshint)
  3. 编译更少的文件(grunt-contrib-less)

有用于 sass 编译、丑化你的 javascript、复制文件/文件夹、缩小 javascript 等的 grunt 插件。

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

问题 1

When I want to add a package (and check in the dependency into git), where does it belong - into package.json or into bower.json

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

问题 2

When should I ever install packages explicitly like that without adding them to the file that manages dependencies

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

  • 编辑 package.json 文件并添加对“请求”的依赖
  • npm 安装

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

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

这两种方法都可以,不会有太大的区别。

关于javascript - Grunt、NPM 和 Bower 之间的区别( package.json 与 bower.json ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21198977/

有关javascript - Grunt、NPM 和 Bower 之间的区别( package.json 与 bower.json )的更多相关文章

  1. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  2. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  3. ruby - 触发器 ruby​​ 中 3 点范围运算符和 2 点范围运算符的区别 - 2

    请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是

  4. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  5. ruby-on-rails - `a ||= b` 和 `a = b if a.nil 之间的区别? - 2

    我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行

  6. ruby - 这两个 Ruby 类初始化定义有什么区别? - 2

    我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是

  7. ruby-on-rails - 如何使用 Rack 接收 JSON 对象 - 2

    我有一个非常简单的RubyRack服务器,例如:app=Proc.newdo|env|req=Rack::Request.new(env).paramspreq.inspect[200,{'Content-Type'=>'text/plain'},['Somebody']]endRack::Handler::Thin.run(app,:Port=>4001,:threaded=>true)每当我使用JSON对象向服务器发送POSTHTTP请求时:{"session":{"accountId":String,"callId":String,"from":Object,"headers":

  8. [工业相机] 分辨率、精度和公差之间的关系 - 2

    📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年

  9. spring.profiles.active和spring.profiles.include的使用及区别说明 - 2

    转自:spring.profiles.active和spring.profiles.include的使用及区别说明下文笔者讲述spring.profiles.active和spring.profiles.include的区别简介说明,如下所示我们都知道,在日常开发中,开发|测试|生产环境都拥有不同的配置信息如:jdbc地址、ip、端口等此时为了避免每次都修改全部信息,我们则可以采用以上的属性处理此类异常spring.profiles.active属性例:配置文件,可使用以下方式定义application-${profile}.properties开发环境配置文件:application-dev

  10. ruby - 这两段代码有什么区别? - 2

    打印1:defsum(i)i=i+[2]end$x=[1]sum($x)print$x打印12:defsum(i)i.push(2)end$x=[1]sum($x)print$x后者是修改全局变量$x。为什么它在第二个例子中被修改而不是在第一个例子中?类Array的任何方法(不仅是push)都会发生这种情况吗? 最佳答案 变量范围在这里无关紧要。在第一段代码中,您仅使用赋值运算符=为变量i赋值,而在第二段代码中,您正在修改$x(也称为i)使用破坏性方法push。赋值从不修改任何对象。它只是提供一个名称来引用一个对象。方法要么是破坏性

随机推荐