Expresss+gulp+MongoDB搭建网站(四)--gulp详解

本文深入介绍了如何使用gulp的task、src和dest以及watch API来构建和管理项目。首先,通过gulp.task定义任务及其依赖,然后利用gulp.src匹配文件并结合gulp.dest输出到指定路径。接着,通过gulp.watch监控文件变化,实现实时更新。最后,通过整合gulp与Express,实现了项目启动并自动处理js/css文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 上一节中,我们创建了一个任务,但这个任务啥也没干,这一节,我们来学习如何通过配置gulpfile.js文件来实现我们想要的各种功能。

一、常用API

1、task

 gulp.task(name [, deps, fn]) 用于创建任务

 其中,name 是task的名字,deps是可选项,就是这个task依赖的tasks(可以是个list),fn是task要执行的函数。

 现在,我们将gulp.task文件修改为:

var gulp = require("gulp");

gulp.task("pre_task1", function() {
	console.log("enter task1 !");
})

gulp.task("pre_task2", function() {
	console.log("enter task2 !");
})

gulp.task("cur_task", ["pre_task1", "pre_task2"], function(){
    console.log("enter current task!");
});

 在命令行执行gulp cur_task:

 (给terminal换了个颜色,看着顺眼多了

 可以看到,cur_task依赖的pre_task1和pre_task2先运行,然后再运行cur_task。

2、src和dest

 gulp.src(globs[, options])用于获取一个虚拟文件对象流,它存储着原始文件的文件名、路径、内容等信息,我们就简单理解为通过这个方法获取我们所需要操作的文件。

 其中,globs参数用来匹配文件路径(包括文件名),可以是string,也可以是一个list,options.base 是指多少路径被保留。

 gulp.dest(path[, options]) 用于输出文件。

 其中,path参数是最终文件要输出的路径,options一般不用。

 一般来说,我们先通过gulp.src()方法获取到需要处理的文件流,然后把文件流通过pipe方法导入到gulp的插件中,最后把经过插件处理后的文件流再通过pipe方法导入到gulp.dest()中。

 现在,我们将gulp.task文件修改为:

var gulp = require("gulp");

gulp.task("server", function(){
    gulp.src(['./public/javascripts/*.js']).pipe(gulp.dest('./build/js'));
    gulp.src(['./public/stylesheets/*.css']).pipe(gulp.dest('./build/css'));
});

 在project路径下新建一个build目录,并在命令行执行gulp server,可以看到:

      可以看到,将public路径下的js/css文件存放到了build路径下,当然我们仅仅是将这些文件整理到了build路径下,并没有对它们做任何处理。

如果想要想要对这些文件进行编译压缩等处理,还需要其他插件的帮助。

3、watch

 gulp.watch(glob [, opts], tasks) or gulp.watch(glob [, opts, cb]) 用于监听文件的变化,然后运行指定的Tasks或者函数。

 现在,我们将gulp.task文件修改为:

var gulp = require("gulp");

gulp.task("server", function(){
    gulp.watch("./public/javascripts/*.js", ["js"]);
    gulp.watch("./public/stylesheets/*.css", ["css"]);
});

gulp.task("js", function () {
    return gulp.src(['./public/javascripts/*.js']).pipe(gulp.dest('./build/js'));
})

gulp.task("css", function () {
    return gulp.src(['./public/stylesheets/*.css']).pipe(gulp.dest('./build/css'));
})

 在命令行执行gulp server,然后修改 project/stylesheets/style.css文件,可以看到命令行有如下信息:

然后查看build/css路径下的style.css文件,发现也同步进行了更新。

二、启动项目

之前第二节中介绍过,在命令行中执行npm start,可以启动我们的exress项目(express迁到4.x版本后,改变了启动方式,不再是执行node app.js了,而是执行npm start, 调用的入口在 ./bin/www, 然后在其中调用到app.js,这样就把与启动服务的代码和主文件分离了)

现在,我们通过配置gulpfile.js文件启动express项目,将js/css文件压缩打包,并实时监听js/css文件,如果在调试修改了js/css文件,也会更新到打包文件当中。

现在,我们将gulp.task文件修改为:

var gulp = require("gulp");

// var jshint = require('gulp-jshint');//js语法检查
var uglify = require("gulp-uglify");////js文件压缩
var minifyCss = require("gulp-minify-css");//css压缩

var browserSync = require('browser-sync');
var reload = browserSync.reload;
var nodemon = require('gulp-nodemon');

var clean = require('gulp-clean');
var concat = require('gulp-concat');//合并文件
var rename = require('gulp-rename');   //文件重命名

gulp.task('clean',function(){
     gulp.src(['./build/js/*.js','./build/css/*.css'],{read:false})
         .pipe(clean());
 });    

gulp.task("node", ["clean"], function() {
    nodemon({
    script: './bin/www',
    ext: 'js html',
        env: {
            'NODE_ENV': 'development'
        }
    })
});

gulp.task('server', ["node", "js", "css"], function() {
    var files = [
        'views/**/*.html',
        'views/**/*.ejs',
        'views/**/*.jade',
        'public/**/*.*'
    ];

    //gulp.run(["node"]);
    browserSync.init(files, {
        proxy: 'http://localhost:4000',
        browser: 'chrome',
        notify: false,
        port: 4001
    });

    gulp.watch(files).on("change", reload); 

    gulp.watch('./public/stylesheets/*.css', ['css']);
    gulp.watch('./public/javascripts/*.js', ['js']); 

});

gulp.task("js", function () {
	return gulp.src(['./public/javascripts/*.js'])
		   .pipe(concat('project.js'))//合并后的文件名
	           .pipe(rename({ suffix: '.min' }))//重命名
                   .pipe(uglify())  //压缩js
                   .pipe(gulp.dest('./build/js'));
})

gulp.task("css", function () {
	return gulp.src(['./public/stylesheets/*.css'])
	           .pipe(concat('project.css'))//合并后的文件名
	           .pipe(rename({ suffix: '.min' }))//重命名
	           .pipe(minifyCss()) //压缩css
	           .pipe(gulp.dest('./build/css'));
})




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值