轻松掌握构建工具:Webpack、Gulp、Grunt 和 Rollup 的使用技巧(下)

在这里插入图片描述

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6
🍨 阿珊和她的猫_CSDN个人主页
🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》
🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

  • 四、 Grunt
    • Grunt 的历史和应用场景
    • 安装和配置 Grunt
  • 五、 Rollup
    • Rollup 的特点和适用范围
    • 安装和配置 Rollup
  • 六、 总结与比较
    • 比较 Webpack、Gulp、Grunt 和 Rollup 的优缺点
    • 不同场景下的工具选择建议

四、 Grunt

Grunt 的历史和应用场景

Grunt 是一个流行的构建工具,它可以帮助开发者自动化各种任务,如

  • 压缩文件
  • 测试代码等。

Grunt 的历史可以追溯到 2010 年,当时由前 Rackspace 员工 John Smith 创建。Grunt 最初是为了简化前端开发流程而设计的,但是现在已经被广泛应用于各种场景,包括后端开发、移动应用程序开发等。

Grunt 的应用场景包括:

  1. 前端开发:Grunt 可以在前端开发过程中自动执行各种任务,如压缩文件、测试代码、编译 Sass 和 CoffeeScript 等。
  2. 后端开发:Grunt 可以在后端开发过程中自动执行各种任务,如压缩文件、测试代码、部署应用程序等。
  3. 移动应用程序开发:Grunt 可以在移动应用程序开发过程中自动执行各种任务,如压缩文件、测试代码、构建应用程序包等。

在这里插入图片描述

总之,Grunt 是一个功能强大、简单易用、灵活高效的构建工具,可以帮助开发者自动化各种任务,提高开发效率。

安装和配置 Grunt

以下是安装和配置 Grunt 的步骤:

  1. 安装 Node.js:安装 Grunt 之前需要先安装 Node.js。可以从 Node.js 的官方网站下载并安装 Node.js。

  2. 安装 Grunt:安装 Node.js 后,可以通过 npm(Node.js 包管理器)安装 Grunt。在命令行中输入以下命令:

npm install --save-dev grunt

这将会在项目中安装 Grunt 和相关的插件。

  1. 创建 Gruntfile.js 文件:在项目中创建一个名为 Gruntfile.js 的文件。这个文件将用于配置 Grunt 的各种参数。

  2. 配置任务:在 Gruntfile.js 文件中,可以通过使用 Grunt 的 API 创建任务。例如,以下代码创建了一个名为 build 的任务,用于压缩文件:

const grunt = require('grunt');
const gruntJs = require('grunt-js');
const gruntCss = require('grunt-css');
const gruntConsoleLog = require('grunt-console-log');grunt.initConfig({js: {src: ['src/js/*.js'],dest: 'dist/js/bundle.js',},css: {src: ['src/css/*.css'],dest: 'dist/css/bundle.css',},log: {tasks: ['css', 'js'],},
});grunt.loadNpmTasks('grunt-js');
grunt.loadNpmTasks('grunt-css');
grunt.loadNpmTasks('grunt-console-log');grunt.registerTask('build', 'css js log');

在这个例子中,grunt.initConfig 用于配置任务的参数,grunt.loadNpmTasks 用于加载相关的插件,grunt.registerTask 用于注册任务。

  1. 运行 Grunt:在命令行中输入以下命令,启动 Grunt 服务器:
grunt

这将会在 Grunt 服务器中监听文件更改,并在文件发生变化时自动重新执行相应的任务。

  1. 输出日志:Grunt 提供了丰富的输出日志功能,可以帮助开发者更好地了解构建过程。可以通过设置 logLevel 选项来控制输出的日志级别。例如,以下代码将日志级别设置为 warn
const grunt = require('grunt');
const gruntJs = require('grunt-js');
const gruntCss = require('grunt-css');
const gruntConsoleLog = require('grunt-console-log');grunt.initConfig({js: {src: ['src/js/*.js'],dest: 'dist/js/bundle.js',},css: {src: ['src/css/*.css'],dest: 'dist/css/bundle.css',},log: {tasks: ['css', 'js'],},
});grunt.loadNpmTasks('grunt-js');
grunt.loadNpmTasks('grunt-css');
grunt.loadNpmTasks('grunt-console-log');grunt.registerTask('build', 'css js log');grunt.log({level: 'warn',
});

这将会在构建过程中输出警告级别的日志,不会输出详细信息。

五、 Rollup

Rollup 的特点和适用范围

Rollup 是一个快速、高效、强大的 JavaScript 打包工具,它具有以下特点:

  1. 快速:Rollup 能够快速地打包 JavaScript 代码,因为它使用了一个高效的 JavaScript 解析器和一个优化器。
  2. 高效:Rollup 能够有效地减少 JavaScript 代码的大小,因为它能够识别和删除未使用的代码。
  3. 强大:Rollup 能够支持各种 JavaScript 模块格式,如 ES6 模块、CommonJS 模块、CJS 模块、Svelte 模块等。

在这里插入图片描述

Rollup 的适用范围包括:

  1. 单页面应用程序:Rollup 非常适合用于构建单页面应用程序,因为它能够有效地压缩代码并提高加载速度。
  2. 应用程序:Rollup 适用于构建应用程序,因为它能够有效地压缩代码并提高性能。
  3. 库:Rollup 适用于构建库,因为它能够有效地压缩代码并提高性能。
  4. 快速开发:Rollup 适用于快速开发,因为它能够快速地打包代码并提高构建速度。

在这里插入图片描述

总之,Rollup 是一个快速、高效、强大的 JavaScript 打包工具,适用于构建各种类型的 JavaScript 项目。

安装和配置 Rollup

以下是安装和配置 Rollup 的步骤:

  1. 安装 Node.js:安装 Rollup 之前需要先安装 Node.js。可以从 Node.js 的官方网站下载并安装 Node.js。

  2. 安装 Rollup:安装 Node.js 后,可以通过 npm(Node.js 包管理器)安装 Rollup。在命令行中输入以下命令:

npm install --save-dev rollup

这将会在项目中安装 Rollup 和相关的插件。

  1. 创建 rollup.config.js 文件:在项目中创建一个名为 rollup.config.js 的文件。这个文件将用于配置 Rollup 的各种参数。

  2. 配置输入和输出:在 rollup.config.js 文件中,可以通过设置 inputoutput 选项来指定输入文件和输出文件。例如,以下代码将输入文件设置为 src/main.js,输出文件设置为 dist/bundle.js

import { rollup } from 'rollup';export default {input: 'src/main.js',output: {file: 'dist/bundle.js',format: 'iife',},
};

在这个例子中,rollup 是一个导入的 Rollup 函数,input 选项指定输入文件,output 选项指定输出文件和输出格式。

  1. 配置插件:Rollup 支持各种插件,如 resolvecommonjsbabelsvelte 等。可以通过设置 plugins 选项来配置插件。例如,以下代码将配置 Babel 插件:
import { rollup } from 'rollup';
import babel from 'rollup-plugin-babel';export default {input: 'src/main.js',output: {file: 'dist/bundle.js',format: 'iife',},plugins: [babel({presets: ['@babel/preset-env'],}),],
};

在这个例子中,rollup-plugin-babel 是导入的 Babel 插件,babel 函数是 Babel 插件的配置参数。

  1. 运行 Rollup:在命令行中输入以下命令,启动 Rollup 服务器:
rollup -c rollup.config.js

这将会在 Rollup 服务器中监听文件更改,并在文件发生变化时自动重新执行相应的任务。

  1. 输出日志:Rollup 提供了丰富的输出日志功能,可以帮助开发者更好地了解构建过程。可以通过设置 logLevel 选项来控制输出的日志级别。例如,以下代码将日志级别设置为 warn
import { rollup } from 'rollup';
import babel from 'rollup-plugin-babel';export default {input: 'src/main.js',output: {file: 'dist/bundle.js',format: 'iife',},plugins: [babel({presets: ['@babel/preset-env'],}),],log: {level: 'warn',},
};

这将会在构建过程中输出警告级别的日志,不会输出详细信息。

六、 总结与比较

比较 Webpack、Gulp、Grunt 和 Rollup 的优缺点

工具优点缺点
Webpack- 强大的模块化支持,可以处理复杂的依赖关系
- 内置开发服务器,支持热模块替换
- 丰富的插件生态系统
- 学习曲线较陡峭
- 配置复杂,需要熟悉其配置文件
Gulp- 简洁的代码风格,易于上手
- 流式构建,能够高效地处理多个任务
- 插件丰富,可自定义任务流程
- 没有模块化的支持,可能需要结合其他工具使用
- 需要手动编写任务代码
Grunt- 强大的任务配置能力,可以定义复杂的构建流程
- 插件丰富,可满足各种构建需求
- 配置文件较为冗长,可读性相对较差
- 对于大型项目,配置和维护工作量较大
Rollup- 简单易懂的配置文件,容易上手
- 支持 ES6 模块化的打包,输出结果更为精简
- 高效的 Tree Shaking 功能,可以实现代码体积的优化
- 对于非模块化的库和依赖,需要额外处理
- 插件生态相对较少

注意:上述表格只包含主要优点和缺点,具体使用和评估这些工具的选择还需要根据项目需求、团队熟悉程度和个人偏好来决定。

不同场景下的工具选择建议

根据不同的场景和需求,建议选择不同的构建工具:

  1. 对于大型 Web 应用,建议使用 Webpack。Webpack 可以处理复杂的依赖关系,并拥有强大的模块化支持,有利于管理和维护复杂的代码结构。此外,Webpack 内置了开发服务器,支持热模块替换,可以大大提高开发效率。不过,Webpack 的学习曲线较陡峭,配置较为复杂,需要花费一定时间来熟悉。

  2. 对于中小型 Web 应用,或者针对某个特定的需求,建议使用 Gulp。Gulp 的代码风格简洁,易于上手,而且支持流式构建,可以高效地处理多个任务。同时,Gulp 的插件丰富,可以满足大部分的构建需求。当然,Gulp 没有内置的模块化支持,如果需要处理模块依赖,可以结合其他工具来使用。

  3. 对于需要定义复杂的构建流程的项目,建议使用 Grunt。Grunt 具有强大的任务配置能力,可以定义复杂的构建流程,有利于自动化构建流程。虽然 Grunt 的配置文件较为冗长,可读性相对较差,但是对于大型项目来说,这些配置功夫是值得付出的。

  4. 对于库的开发和打包,建议使用 Rollup。Rollup 支持 ES6 模块化的打包,输出结果比较精简,可以减小代码体积。同时,Rollup 的 Tree Shaking 功能非常高效,可以帮助实现代码体积的进一步优化。不过,Rollup 的插件生态相对较少,对于非模块化的库和依赖,需要额外处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/618380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大厂算法面试冲刺班】day0:数据范围反推时间复杂度

常见算法的时间复杂度 规定n是数组的长度/树或图的节点数 二分查找:O(logn) 双指针/滑动窗口:O(n) DFS/BFS:O(n) 构建前缀和:O(n) 查找前缀和:O(1) 一维动态规划:O(n) 二维动态规划:O(n^2) 回溯…

【深度学习每日小知识】Logistic Loss 逻辑回归

逻辑回归的损失函数 线性回归的损失函数是平方损失。逻辑回归的损失函数是对数损失,定义如下: L o g L o s s ∑ ( x , y ) ∈ D − y log ⁡ ( y ′ ) − ( 1 − y ) log ⁡ ( 1 − y ′ ) LogLoss\sum_{(x,y)\in D}-y\log(y)-(1-y)\log(1-y) LogLoss…

卡尔曼滤波:理论与代码

卡尔曼滤波:理论与代码 引言 卡尔曼滤波是一种用于估计系统状态的优化技术,特别适用于含有噪声的测量数据和系统动态变化的情况。本文将简单探讨卡尔曼滤波的理论基础、数学公式的推导,并通过Python代码示例演示其在实际应用中的效果。 一…

基于SSM+vue的篮球场预约管理系统(Java毕业设计)

大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是…

Python 最新版本 3.12.1 环境配置(windows)

文章目录 python 3.12.1环境安装3.12.1 网盘下载3.12.1 官网下载 python 安装完成测试第一个 python 程序Hello Python python 3.12.1环境安装 3.12.1 网盘下载 python 3.12.1 百度网盘地址:https://pan.baidu.com/s/1SAcH_uH0T3DiERn6AZeQlg?pwd4242 提取码&a…

不同activity项目创建时的区别

在 Android Studio 中创建项目时,可以选择创建不同类型的 Activity 作为应用程序的入口点。其中,包括 Empty Activity、Basic Activity、Empty Compose Activity 和 Basic Compose Activity 四种类型。 Empty Activity:这是最简单的 Activity…

最新靠谱可用的-Mac-环境下-FFmpeg-环境搭建

最近在尝试搭建 FFmpeg 开发环境时遇到一个蛋疼的事,Google 了 N 篇文章竟然没有一篇是可以跑起来的! 少部分教程是给出了自我矛盾的配置(是的,按照贴出来的代码和配置,他自己都跑不起来),大部…

【Leetcode】2182. 构造限制重复的字符串

文章目录 题目思路代码 题目 2182. 构造限制重复的字符串 问题:给你一个字符串 s 和一个整数 repeatLimit ,用 s 中的字符构造一个新字符串 repeatLimitedString ,使任何字母 连续 出现的次数都不超过 repeatLimit 次。你不必使用 s 中的全…

【新年福利】买1送1,告别360!这个系统清理神器干净无广告!

在日常的工作中,面对重要文件时往往都会备份一份;在下载文件时,有时也会不小心把一份文件下载好多次。这些情况会导致电脑中出现重复的文件,删除这些重复文件,可以节省电脑空间,帮助提高电脑运行速度。那么…

mysql关于创建表的小试题

目录 例题: 解题思路及步骤: 实验步骤: 步骤一:创建数据库 步骤二:创建表 步骤三:插入数据 例题: 1、创建一个英雄表(hero),管于四大名著的主键 nam…

2-《Java并发编程实战》(Java Concurrency in Practice) 代码示例

说明 这是针对《Java并发编程实战》(Java Concurrency in Practice)一书中的示例代码进行扩展,并且进行验证的完整代码,具体背景可看这篇文章:1-《Java并发编程实战》(Java Concurrency in Practice) 代码示例 下面的示例代码都是针对书中的&…

Android Studio个性化修改

Android Studio原始界面看着也太无趣了叭,话不多说跟步骤走就可以。 1.更改Android Studio主题及背景 1.背景修改 File->Settings->Plugins,搜索Sexy Editor 重启后,左侧边栏出现Other Settings选项,点击SexyEditor进行背…

二分搜索边界问题的简单结论

引言 二分搜索是一个说简单也很简单(代码很固定,也没几行),说难也很难(边界问题可能会让人想不太清楚)。 事实上,边界问题也是是算法题中普遍存在的难点。 这篇文章讲两个简单的结论&#xff0…

009-Zynq基操之如何去玩转PL向PS的中断(对新手友好,走过路过千万不要错过)

文章目录 前言一、PL-PS的中断是啥?二、PL-PS端中断详细步骤1.ZYNQ核配置2.PS端中断函数配置3.需要拓展多个中断函数 总结 前言 本设计跟我的ZYNQ实战合集专栏中的脉冲触发电路有关系,也正好趁这个机会讲述一下PL-PS的中断系统,如何去触发中…

Java 设计模式

1.单例设计模式 对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。 1.1 饿汉式 构造器私有化 --> 防止直接new类的内部创建对象提供一个static的public方法 getInstance class GirlFriend {private String name;private static GirlFri…

MySQL第二次

作业要求: 作业代码实现: create database db_04 default charsetutf8mb4;use db_04;create table if not exists t_hero(id int primary key auto_increment,name varchar(20) not null unique,nickname varchar(50) not null unique,address varchar…

【Python机器学习系列】建立KNN模型预测心脏疾病(完整实现过程)

这是Python程序开发系列原创文章,我的第198篇原创文章。 一、问题 对于表格数据,一套完整的机器学习建模流程如下: 针对不同的数据集,有些步骤不适用即不需要做,其中橘红色框为必要步骤,由于数据质量较高&…

4点优势,昂首资本使用浮动差价不使用固定差价的原因

在交易中,很多投资者和昂首资本一样,会使用浮动点差而不使用固定点差,那是因为投资者和昂首资本一样认为,使用浮动差价交易会比使用固定价差交易更有优势。 首先在大部分交易时段,价差缩小。正如投资者和昂首资本所知…

6. 逻辑删除

逻辑删除对应的是物理删除,分别介绍一下这两个概念: 物理删除 :指的是真正的删除,即:当执行删除操作时,将数据表中的数据进行删除,之后将无法再查询到该数据逻辑删除 :并不是真正意…

JavaScript常用事件详解

一、用于form(表单)的事件 在网页中经常会遇到一些表单的验证,是通过事件进行处理的,比如用户输入用户名之后,及时显示用户是否被注册 用于form(表单)的事件 事件名功能 onblur 当元素失…