Javascript Grunt、NPM和Bower之间的差异(package.json与Bower.json)

Javascript Grunt、NPM和Bower之间的差异(package.json与Bower.json),javascript,gruntjs,bower,Javascript,Gruntjs,Bower,我刚开始使用npm和bower,在emberjs中构建我的第一个应用:)。 我对rails有一定的经验,因此我熟悉列出依赖项的文件(例如bundler Gemfile) 问题:当我想添加一个包(并将依赖项签入git)时,它属于哪里-进入package.json或进入bower.json 据我所知, 运行bower install将获取软件包并将其放入/vendor目录, 运行npm install它将获取它并将其放入/node\u modules目录 表示bower用于前端,npm用于后端。 乍

我刚开始使用npm和bower,在emberjs中构建我的第一个应用:)。
我对rails有一定的经验,因此我熟悉列出依赖项的文件(例如bundler Gemfile)

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

据我所知,
运行
bower install
将获取软件包并将其放入
/vendor
目录,
运行
npm install
它将获取它并将其放入
/node\u modules
目录

表示bower用于前端,npm用于后端。
乍一看似乎坚持这一区别。。。但是Grunfile中的指令给出了两个显式命令,所以我在这里完全搞不清楚

凭直觉我猜

  • npm安装--save dev package name相当于将包名添加到my package.json

  • bower安装--保存包名可能与将包添加到my bower.json并运行bower安装相同


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

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

    使这一点更加混乱的一个事实是,npm提供了一些也可以用于前端开发的包,如
    grunt
    jshint

    这些行增加了更多的含义

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

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

  • 压缩一些文件(例如zipup插件)
  • js文件上的Linting(jshint)
  • 编译更少的文件(grunt contrib更少)
  • 有一些grunt插件用于sass编译、丑化javascript、复制文件/文件夹、缩小javascript等

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

    问题1

    当我想添加一个包(并将依赖项签入git)时,它属于哪里?是package.json还是bower.json

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

    问题2

    我什么时候应该像那样显式地安装软件包,而不将它们添加到管理依赖项的文件中

    无论您是显式安装包还是在.json文件中提及依赖项,这都无关紧要。假设你正处于一个节点项目的中间,你需要另一个项目,比如说“代码>请求< /代码>,那么你有两个选项:

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

    • 使用命令行:
      npm安装--保存请求
    --save
    选项也将依赖项添加到package.json文件中。如果不指定
    --save
    选项,它将只下载包,但json文件不受影响


    无论采用哪种方式,都不会有实质性差异。

    2016年年中更新:

    事情变化如此之快,如果2017年晚些时候,这个答案可能不再是最新的

    初学者可能会很快迷失在构建工具和工作流的选择中,但2016年最新的是根本不使用Bower、Grunt或Gulp!借助Webpack,您可以直接在NPM中完成所有操作

    • 谷歌“npm作为构建工具”结果:

    • 网页:

    别误会,人们使用其他工作流,我仍然在我的遗留项目中使用GULP(但慢慢退出),但这是最好的公司的做法,在这个工作流中工作的开发人员赚了很多钱

    看看这个模板,它是一个非常最新的设置,由最好的和最新的技术组成:

    • 网页包
    • NPM作为构建工具(无吞咽、咕噜声或凉亭)
    • 与Redux反应
    • 埃斯林特
    • 名单很长。去探索吧
    你的问题:

    当我想添加一个包(并将依赖项签入git)时, 它属于哪里?是package.json还是bower.json

    • 现在一切都属于package.json

    • 构建所需的依赖项位于“devdependences”中,即npm安装要求目录--save dev(-save dev通过向devdependences添加条目来更新您的package.json)

    • 运行时应用程序所需的依赖项位于“依赖项”中,即
      npm install lodash--save
      (-save updates your package.json,通过向依赖项添加条目)
    如果是这样的话,我什么时候可以像那样显式地安装软件包,而不将它们添加到管理依赖项的文件中(除了全局安装命令行工具)

    始终。只是因为舒适。添加标志(
    --save dev
    --save
    )时,管理deps的文件(package.json)将自动更新。不要浪费时间手动编辑其中的依赖项。s