首页 文章

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

提问于
浏览
583

我是新手使用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的指令给出了两个明确的命令,所以我在这里完全糊涂了 .

直觉我会猜到

  • npm install --save-dev package-name 等同于将package-name添加到我的package.json中

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

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

2 回答

  • 566

    Update for mid 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)

    • 运行时期间应用程序所需的依赖关系是"dependencies",即 npm install lodash --save (--save通过向依赖项添加条目来更新package.json)

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

    Always . 只是因为舒适 . 添加标志( --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

  • 145

    Npm和Bower都是依赖管理工具 . 但两者之间的主要区别是 npm is used for installing Node js modules but bower js is used for managing front end components like html, css, js etc .

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

    这些行增加了更多含义

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

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

    • 压缩一些文件(例如zipup插件)

    • 对js文件进行Linting(jshint)

    • 编译较少的文件(grunt-contrib-less)

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

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

    Question-1

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

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

    Question-2

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

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

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

    • npm安装

    要么

    • 使用命令行: npm install --save request --save options也将依赖项添加到package.json文件中 . 如果未指定 --save 选项,则只会下载程序包,但json文件不受影响 .

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

相关问题