欢迎光临
我们一直在努力

常见构建工具及对比(Webpack/Grunt/Gulp)

Grunt

Grunt是一个任务执行者,有大量现成的插件封装了常见的任务,也能管理任务之间的依赖关系,自动化执行依赖的任务,每个任务的具体执行代码和依赖关系写在配置文件 Gruntfile.js 里,例如:

module.exports = function (grunt) {
    // 所有插件的配置信息
    grunt.initConfig({
        // uglify 插件配置信息
        uglify: {
            app_task: {
                files: {
                    'build/app.min.js': ['lib/index.js', 'lib/test.js']
                }
            }
        },
        // watch 插件配置信息
        watch: {
            another: {
                files: ['lib/*.js']
            }
        }
    });
    
    // 告诉 grunt 我们将使用这些插件
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-watch');
    
    // 告诉 grunt 当我们在终端启动 grunt 时需要执行哪些任务
    grunt.registerTask('dev', ['uglify', 'watch']);2017
}

在项目根目录下执行命令 grunt dev 就会启动 JavaScript 文件压缩和自动刷新功能。

Grunt的优点是:

  • 灵活,它只负责执行你定义的任务;
  • 大量的可复用插件封装好了常见的构建任务。

Grunt的缺点是集成度不高,要写很多配置后才可以用,无法做到开箱即用。

Gulp

Gulp 是一个基于流的自动化构建工具。 除了可以管理和执行任务,还支持监听文件、读写文件。Gulp 被设计得非常简单,只通过下面5种个方法就可以胜任几乎所有构建场景:

  • 通过 gulp.task 注册一个任务;
  • 通过 gulp.run 执行任务;
  • 通过 gulp.watch 监听文件变化;
  • 通过 gulp.src 读取文件;
  • 通过 gulp.dest 写文件。

Gulp 的最大特点是引入了流的概念,同时提供了一系列常用的插件去处理流,流可以在插件之间传递,大致使用如下:

// 引入 Gulp
var gulp = require('gulp');
// 引入 插件
var jshint = require('gulp-jshint');
var sass = require('gulp-sass');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');

// 编译 scss 任务
gulp.task('sass', function () {
    // 读取文件通过管道输给插件
    gulp.src('./scss/*.scss')
        // scss插件把scss编译成css文件
        .pipe(sass())
        // 输出文件
        .pipe(gulp.dest('./css'))
});

// 合并压缩js
gulp.task('scripts', function () {
    gulp.src('./js/*.js')
        .pipe(concat('all.js'))
        .pipe(uglify())
        .pipe(gulp.dest('./dist'));
});

// 监听文件变化 
gulp.task('watch', function () {
    // 当 scss文件被编译时执行 scss 任务
    gulp.watch('./scss/*.scss', ['sass']);
    gulp.watch('./js/*.js', ['scripts']);    
});

Gulp 的优点是好用又不失灵活,既可以单独完成构建也可以和其它工具搭配使用。其缺点是和 Grunt 类似,集成度不高,要写很多配置后才可以用,无法做到开箱即用。

可以将Gulp 看作 Grunt 的加强版。相对于 Grunt,Gulp增加了监听文件、读写文件、流式处理的功能。

Webpack

Webpack 是一个打包模块化 JavaScript 的工具,在 Webpack 里一切文件皆模块,通过 Loader 转换文件,通过 Plugin 注入钩子,最后输出由多个模块组合成的文件。Webpack 专注于构建模块化项目。

一切文件:JavaScript、CSS、SCSS、图片、模板,在 Webpack 眼中都是一个个模块,这样的好处是能清晰的描述出各个模块之间的依赖关系,以方便 Webpack 对模块进行组合和打包。 经过 Webpack 的处理,最终会输出浏览器能使用的静态资源。

Webpack 具有很大的灵活性,能配置如何处理文件,大致使用如下:

module.exports = {
    // 所有模块的入口,webpack从入口开始递归解析出所有依赖的模块
    entry: './app.js',
    output: {
        // 把入口所依赖的所有模块打包成一个文件 bundle.js 输出
        filename: 'bundle.js'
    }
};

Webpack的优点是:

  • 专注于处理模块化的项目,能做到开箱即用一步到位;
  • 通过 Plugin 扩展,完整好用又不失灵活;
  • 使用场景不仅限于 Web 开发;
  • 社区庞大活跃,经常引入紧跟时代发展的新特性,能为大多数场景找到已有的开源扩展;
  • 良好的开发体验。

Webpack的缺点是只能用于采用模块化开发的项目。

赞(0)
版权归原作者所有,如有侵权请告知。达维营-前端网 » 常见构建工具及对比(Webpack/Grunt/Gulp)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址