博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前端自动化构建工具gulp记录
阅读量:5070 次
发布时间:2019-06-12

本文共 6530 字,大约阅读时间需要 21 分钟。

一、安装

1)安装nodejs

通过的npm安装gulp,插件也可以通过npm安装。windows系统是个.msi工具,只要一直下一步即可,软件会自动在写入环境变量中,这样就能在cmd命令窗口中直接使用node或npm指令。

我上面的cmd,已经被封装过了,字体都变成彩色的了。安装了这个工具后,还可以通过Git Bash打Linux的命令。git是版本控制的工具,这里也不多说了。

 

2)npm

(node package manager)nodejs的包管理器,用于node插件管理(包括安装、卸载、管理依赖等)

gulp赫然出现在npm的首页中。

命令提示符执行:

npm install 
[-g] [--save-dev]

1. <name>:node插件名称。例:npm install gulp-less --save-dev

2. -g:全局安装。将会安装在C:\Users\Administrator\AppData\Roaming\npm,并且写入系统环境变量;

非全局安装:将会安装在当前定位目录;

全局安装可以通过命令行在任何地方调用它,本地安装将安装在定位目录的node_modules文件夹下,通过require()调用;

3. --save:将保存配置信息至package.json(package.json是nodejs项目配置文件);

4. -dev:保存至package.json的devDependencies节点,不指定-dev将保存至dependencies节点

配置文件package.json是为了方便下载相关的包,只需要在有这个文件的文件夹下面执行“npm install”(如果安装了cnpm就用“cnpm install”),则会根据package.json下载所有需要的包。【注:我用demo中的package文件在另外一台电脑上面直接安装,打“gulp watch”的时候出现了很多错误】

 

3)cnpm

因为npm安装插件是从国外服务器下载,受网络影响大,可能出现异常。

在国内推荐使用。“这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步”

安装指令如下:

npm install -g cnpm --registry=https://registry.npm.taobao.org

注意安装的时候会出现错误提示,你可以关闭命令窗口再打开,打入“cnpm -v”可以查看版本号。cnpm跟npm用法完全一致。

 

4)全局安装gulp

cnpm install gulp -g

如果在某个工程文件夹中提示错误,那就手动再安装下“”:

 

5)新建package.json文件

在命令窗口输入指令“cnpm init”。如果在Git Bash打这个指令,会报“No gulpfile found”的错误。

 

6)新建gulpfile.js文件

gulpfile.js是gulp项目的配置文件,里面是task的配置。简易代码如下:

var gulp = require('gulp');gulp.task('default', function() {  // 将你的默认的任务代码放在这});

 

7)删除node_modules文件夹

当安装了各种插件后,在你相应的目录下面会出现node_modules文件夹,里面又嵌套了很深的文件夹目录,如果你用右键删除的方式,会变得很慢,并且还会提示错误“无法删除”。

这里有个方法,用npm里面一个专门用于删除的模块插件“”。

cnpm install -g rimraf

只需要打简单的指令就可删除:

1 cd xxx[include node_modules folder] //用cd指令将文件目录设置到包含nod_modules的位置2 3 rimraf node_modules

 

二、插件与功能

1)全局配置config

可以将需要在gulpfile中引用的参数,放到这里,包括一些路径,功能的开关等。例如:

module.exports = {    name : '.....',    devPath : '.....',    //项目根路径,根路径下可以包含多个项目    prodPath : '....', //生产路径根路径    sassPath : '.....', //SASS包含文件路径    rmHtmlWhitespace : false,//html中是否去除空格    webpackEntry : {        index : 'index.js'//js合并    },    server : {        port : 8088    }};

注意下这里使用了module.exports,这是nodejs的语法。在gulpfile中将会用require引用config。

//加载项目配置var config = require('./config');

 

2)监控gulp.watch

这个是gulp自带的,就是当你的文件改动了后,就做相应的task。还有一个插件

监控sass中的文件变化,一有变化就做sass的编译。“**”与“*”这种语法可以参考《

gulp.task('watch', function() {    livereload.listen();    gulp.watch('**.html', ['html']);      gulp.watch('./sass/*.scss', ['sass']);      gulp.watch('./css/*.css', ['css']);      gulp.watch('./js/*.js', ['js']);});

监控了四个地方的修改,js、html、css和sass,并且有做了自动刷新livereload。这个是通过“”来实现的。

firefox货chrome要分别安装插件才可运行。chrom插件如下:

安装完后会在浏览器中出现个小按钮,,注意是黑色的时候才是在执行中。还有就是要在相应的task中加相应的代码:

.pipe(livereload())

 

3)sass编译与css压缩

通过sass编写css,能更模块化,多人协作比较方便。安装

plumber()”是引用了“”,任务错误中断自动重传。在使用一段时间后发现,执行了“plumber()”后监控是还继续的,但是sass就不会自动编译了。

后面把“plumber()”去掉,添加红色部分,这样就不会出现不编译的情况了。

gulp.task('sass', function() {    gulp.src('./sass/*.scss')            .pipe(plumber())            .pipe(sass().on('error', sass.logError))            .pipe(gulp.dest('./css'))            .pipe(livereload());});

,压缩CSS代码。

gulp.task('css', ['sass'], function() {    //先删除dist中的css,有时候会不更新    gulp.src('./dist/css/*.css')        .pipe(rimraf({force: true}));            gulp.src('./css/*.css')        .pipe(cssnano())        .pipe(gulp.dest('./dist/css'))        .pipe(livereload());});

 

4)js压缩与模块化合并

使用做js的压缩。gulpRimraf()用来删除文件夹,引用自

gulp.task('js', function() {    //先删除dist中的css,有时候会不更新    gulp.src('./dist/js/*.js')        .pipe(rimraf({force: true}));            gulp.src('./js/*.js')        .pipe(plumber())        .pipe(jshint())        .pipe(jshint.reporter('default'))        .pipe(uglify())        .pipe(gulp.dest('./dist/js'))        .pipe(livereload());});

上面的jshint是用来分析代码的,例如分号没写。通过打指令“

模块化合并使用。github上面还有篇

gulp.task('webpack', function(){    var entry = {};    for(var name in config.webpackEntry){        entry[name] = './js/' + config.webpackEntry[name];    }    //排除bundle文件    return gulp.src('./js/*[^bundle].js')        .pipe(plumber())        .pipe(webpack({            entry: entry,            output: {                filename: '[name].bundle.js',            }        }))        .pipe(gulp.dest('./js'));});

 

5)image图片无损压缩

通过压缩的图片,有时候能牙70%以上,非常给力。

gulp.task('image', function(){    gulp.src('./img/*.+(jpg|png|gif|svg)')         .pipe(imagemin())       .pipe(gulp.dest('./dist/img'));});

 

6)html压缩

经过压缩过的html可以缩小很多,可以看到都挤到了一起,有很多参数可以选择,比如去除空格等。

还可以通过来给静态资源文件加个版本号。

gulp.task('html', function() {    gulp.src('*.html')        .pipe(replace('__VERSION', Date.now().toString(16)))        .pipe(htmlmin({collapseWhitespace: true}))        .pipe(gulp.dest('./dist'))        .pipe(livereload());});

 

7)fontmin字体压缩

网上有很多webfont,例如国外的,国内的。都能做出漂亮的自定义字体。

与西文字体不同,由于字符集过大,中文字体无法享受 webfont 带来的便利。为了让中文字体也乘上这道风,我们需要对其进行min。使用指令“”。

gulp.task('font', function() {    gulp.src('font/*.+(eot|svg|ttf|woff)')      .pipe(fontmin({          text: '人晒'      }))      .pipe(gulp.dest('dist/font'));});

配置的两个字“人晒”与没配置的“国”,明显有区别。

 

8)CSS自动加浏览器前缀

”可以自动加“-webkit”、“-moz”等的前缀,自己可以少写很多兼容代码。可以在上面的sass的编译中添加一个引用。

有多个参数,。“last 2 versions”是浏览器的过滤设置,还有多个值,可以。插件并不仅仅是加个前缀,还能编译出旧的语法。例如flex的不同写法。

后面又查到一个插件“”,用户量非常,这是一个插件,需要引入“”。更多的PostCSS插件可以

gulp.task('sass', function() {    gulp.src('./sass/*.scss')            .pipe(plumber())            .pipe(sass().on('error', sass.logError))            .pipe(autoprefix({            browsers: ['last 2 versions', 'Firefox < 20'],            cascade: false           }))            .pipe(gulp.dest('./css'))            .pipe(livereload());});

输出:

 

9)将px自动转换为rem

使用了一个插件,“”。

如果不想编译成rem单位,就在属性后面写“/*px*/”或“/*no*/”,这两个值也有点不同,具体

var postcss = require('gulp-postcss');var px2rem = require('postcss-px2rem');gulp.task('sass', function () {    var processors = [px2rem({remUnit: 75})];    return gulp.src('./sass/*.scss')        .pipe(gulpSass().on('error', gulpSass.logError))        .pipe(postcss(processors))        .pipe(gulp.dest('./css/')).pipe(livereload());});

 

 

10)启动一个本地调试服务器

通过,可以做个server。如果你用notpad++这种开发页面,那这个指令会很有用。

gulp.task('server', function(){    var option = {        root : config.devPath,        port : config.server.port    };    if(config.server.root){        option.root = config.server.root;    }    connect.server(option);});

上面的localhost可以改成本机的IP地址,手机与电脑在同一个网段的话,就可以直接用手机调试了。

 

11)node_modules目录

node_modules目录中的内容非常大,如果在每个工程下面都安装,会造成很大的浪费。可以将其放在各个工程的公共父级中,而在各个目录下面使用自己的gulpfile.js,config.js等配置文件。

例如工程都在public文件夹中,我就将node_modules放在public的平级。

 

demo下载地址:

 

参考资料:

   gulp详细入门教程

   NPM 使用介绍

    Gulp:任务自动管理工具

  Node.js 系列之 —— module.exports 与 exports

   JGulp: 利用Gulp 配置的前端项目自动化工作流

    Fontmin 快速指南

转载于:https://www.cnblogs.com/strick/p/5151714.html

你可能感兴趣的文章
ajax心得
查看>>
在Unity3D的网络游戏中实现资源动态加载
查看>>
Control character in cookie value or attribute
查看>>
BZOJ2594 [Wc2006]水管局长数据加强版 LCT kruskal
查看>>
莫比乌斯反演
查看>>
c语言项目开发流程一部曲
查看>>
[正则]排除字符组
查看>>
《构建之法》读后感
查看>>
字符长度的问题
查看>>
PLSQL连接公司数据库
查看>>
解决radio、select表单返回时,再次选择失效
查看>>
crontab定时任务
查看>>
RDS的板子推倒重画
查看>>
测试方法
查看>>
Maven常用参数及其说明
查看>>
js中创建对象
查看>>
如何安装window7 语言包
查看>>
90.Subsets II
查看>>
[转]很简单的JS实现上传前预览图片(兼容IE8)
查看>>
ios 不通过import 调用其他控制器的方法
查看>>