gulp自动化构建项目——环境搭建+自动化部署

标签(空格分隔): gulp 自动化构建


序:

随着互联网的飞速发展智能设备的普及,浏览器侵占的市场更加巨大,导致前端行业有了一个质的飞跃,项目越来越大越来越复杂,带来一些列管理维护优化团队多人协作等问题要思考,于是自动化构建出现了。

gulp简介

常见的自动化构建工具有grunt、gulp、webpack。其中grunt对于新人入门可能不太好学吧。一般gulp可以和ng配合使用,webpack可以和vue配合 。

gulp基础环境搭建:

  1. 在本地某处新建项目文件夹,命名为webProject,表示项目。进入文件夹后使用git bash here 在控制台输入npm init初始化,创建package.json配置文件。填写项目的相关信息,或者你不想写,一路回车也行,直至项目根目录生成package.json文件,表示初始化完成。

ps: package.json文件为本项目配置文件。

  1. 局部安装gulp,输入npm install gulp --save-dev安装项目开发依赖包gulp,安装完成后项目根目录出现node_modules文件夹。

ps:
--save表示写入配置文件即package.json文件中,
-dev表示只在开发阶段依赖。

输入gulp -v检查是否安装成功。

ps:出现版本号表示安装成功。

  1. 此时在项目根目录新建文件gulpfile.js,注意文件名为固定,不能随意修改。此时项目根目录的情况是这样的:

基础环境搭建完成了。

gulp相关插件使用

接下来主要是建立src源码目录, 配置gulpfile.js,即使用gulp的相关模块插件。

  1. 根目录下创建src / html文件夹,,在src/ html下面创建index.html文件,现在的结构应该是这样的:
    大概需要这几块,
    webProject

    |----- node_modules
    |-----src

       |-----html
             |-----index.html 
       |-----style
             |-----index.less
       |-----js
             |-----index.js 
       |-----images
             |-----logo.png
    

在index.html文件中写入你的html结构,如果你做单页应用程序只需要一个index页面即可,每个以组件视图需要单独封装提取出来,可能再需要一个 view 文件夹。例如:ng项目,,js文件夹里有 入口js、控制器,服务等文件。每一个文件夹下有对应的子集文件夹防止内嵌组建的less/js/html(view)等。

  1. 配置gulpfile.js
//这里怕每次把路径写错且方便简写,就把路径存储到了一个对象里。
var app = {
    srcPath:'src/',
    buildPath:'build/',
    distPath:'dist/'
}

/*1.引入gulp以及其他插件*/
var gulp = require('gulp');
var less = require('gulp-less');
var cssmin = require('gulp-cssmin');
var uglify = require('gulp-uglify');
var concat = require('gulp-concat');
var connect = require('gulp-connect');
var imagemin = require('gulp-imagemin');
var open = require('open');

//2 定义任务,实现自动拷贝
gulp.task('lib',function () {
   gulp.src('bower_components/**/*.js')
       .pipe(gulp.dest(app.buildPath+'lib'))
       .pipe(gulp.dest(app.distPath+'lib'))
       .pipe(connect.reload())
});



/*2.定义任务 把所有html文件移动另一个位置*/
gulp.task('html',function () {
    /*要操作哪些文件 确定源文件地址*/
    gulp.src(app.srcPath+'**/*.html')  /*src下所有目录下的所有.html文件*/
        .pipe(gulp.dest(app.buildPath))
        .pipe(gulp.dest(app.distPath))
        .pipe(connect.reload())
});
/*3.执行任务 通过命令行。gulp 任务名称*/



/*定义编译less任务  下载对应的插件 gulp-less
* 把less文件转成css放到build
* */
gulp.task('less',function () {
    gulp.src(app.srcPath+'style/index.less')
        .pipe(less())
        .pipe(gulp.dest(app.buildPath+'css/'))
        /*经过压缩,放到dist目录当中*/
        .pipe(cssmin())
        .pipe(gulp.dest(app.distPath+'css/'))
        .pipe(connect.reload())
});

/*合并js*/
gulp.task('js',function () {
   gulp.src(app.srcPath+'js/**/*.js')
       .pipe(concat('index.js'))
       .pipe(gulp.dest(app.buildPath+'js/'))
       .pipe(uglify())
       .pipe(gulp.dest(app.distPath+'js'))
       .pipe(connect.reload())
});

/*压缩图片*/
gulp.task('image',function () {
     gulp.src(app.srcPath+'images/**/*')
         .pipe(gulp.dest(app.buildPath+'images'))
         .pipe(imagemin())
         .pipe(gulp.dest(app.distPath+'images'))
         .pipe(connect.reload())
});

/*同时执行多个任务*/
gulp.task('build',['less','html','js','image','lib']);

gulp.task('server',['build'],function () {
    /*设置服务器*/
    connect.server({
        root:[app.buildPath],
        livereload:true,
        //实时热更新,浏览器里打开的是build 目录下的代码文件。方便调试。
        port:3000
        //端口任意,只要是4位。冲突时改写一次
    })
    /*监听哪些文件*/
    gulp.watch('bower_components/**/*',['lib']);
    gulp.watch(app.srcPath+'**/*.html',['html']);
    gulp.watch(app.srcPath+'js/**/*.js',['js']);
    gulp.watch(app.srcPath+'images/**/*',['image']);
    gulp.watch(app.srcPath+'style/**/*.less',['less']);

    open('http://localhost:9999');
});

/*定义默认任务*/
gulp.task('default',['server']);



到此,初步的自动化已经实现了,此处实时刷新的效率与电脑配置有关。如果使用webstrom写代码自动保存频率略高,有的有卡顿。

----------------------------------------------------喜欢就动动小手哈。------------------------------------------------------

--------------------------------------你的支持是洒家-麦壳-macrolam前进的动力--------------------------------------

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348

推荐阅读更多精彩内容