美文网首页Web 前端开发
前端自动化构建工具gulp的安装和使用(包括添加版本号)

前端自动化构建工具gulp的安装和使用(包括添加版本号)

作者: 奔跑的大橙子 | 来源:发表于2018-02-13 00:08 被阅读104次

         一直以来工作中都没有用到过gulp,所以一直没花时间去看,前段时间做公司年会项目的时候,因为是微信端的网页应用,需要在手机上运行,但是手机的缓存会导致每次修改的代码没有生效,于是每次修改了css和js都要重新修改对应的css和js的版本号,特别麻烦,于是开始学习gulp,网上与gulp相关的文章写的都不太清楚,所以一直看不明白。综合自己看到的几篇文章,结合自己的理解之后,重新写了一篇,希望对大家有所帮助,文章中有不正确的地方,欢迎批评指正!

    1、安装nodejs;

    2、新建package.json文件;

    3、全局和本地安装gulp;

    4、安装gulp插件;

    5、新建gulpfile.js文件;

    6、通过命令提示符运行gulp任务。

    一、安装nodejs

    https://nodejs.org/en/选择对应的版本下载

    二、使用命令行

    node -v查看安装的nodejs版本,出现版本号,说明刚刚已正确安装nodejs。PS:未能出现版本号,请尝试注销电脑重试;

    npm -v查看npm的版本号,npm是在安装nodejs时一同安装的nodejs包管理器

    cd定位到目录,用法:cd + 路径;

    dir列出文件列表;

    cls清空命令提示符窗口内容

    新建项目工程gulp_web(可以自定义其他名称),原文件夹的名称为assets

    压缩后的文件夹的名称为build

    在命令行打开gulp_web文件夹所在的路径,执行下图所示操作

    三、全局安装gulp

    1、说明:全局安装gulp目的是为了通过她执行gulp任务;

    2、安装:命令提示符执行cnpm install gulp -g;(npm安装有问题可以换成cnpm,cnpm安装过程自行百度)

    3、查看是否正确安装:命令提示符执行gulp -v,出现版本号即为正确安装。

    安装gulp的时候,可能会提示gulp安装失败,如图所示,遇到这个问题,可能是node的版本过低,重新安装下node的最新版本

    四、新建package.json文件

    1、说明:package.json是基于nodejs项目必不可少的配置文件,它是存放在项目根目录的普通json文件;

    2、它是这样一个json文件(注意:json文件内是不能写注释的,复制下列内容请删除注释):

    {

      "name":"test",  //项目名称(必须)

      "version":"1.0.0",  //项目版本(必须)

      "description":"This is for study gulp project !",  //项目描述(必须)

      "homepage":"",  //项目主页

      "repository":{    //项目资源库

        "type":"git",

        "url":"https://git.oschina.net/xxxx"

      },

      "author":{    //项目作者信息

        "name":"surging",

        "email":"surging2@qq.com"

      },

      "license":"ISC",    //项目许可协议

      "devDependencies":{    //项目依赖的插件

        "gulp":"^3.8.11",

        "gulp-less":"^3.0.0"

      }

    }

    3、当然我们可以手动新建这个配置文件,命令提示符执行cnpm init

    五、本地安装gulp插件

    接着开始本地安装gulp各种插件,在这里找你需要的插件。有四个是用得最多的,必备的

    1、语法检查   (gulp-jshint)

    2、合并文件   (gulp-concat)

    3、压缩代码   (gulp-uglify)

    4、文件重命名   (gulp-rename)

    常用插件安装步骤:

    本示例以gulp-less为例(编译less文件),命令提示符执行cnpm install gulp-less --save-dev

    为了能正常使用,我们还得本地安装gulp

    cnpm install gulp --save-dev

    cnpm install gulp-sass --save-dev

    cnpm install gulp-concat --save-dev;多个文件合并为一个

    cnpm install gulp-minify-css --save-dev;将CSS压缩处理成一行(以前的写法)

    cnpm install gulp-clean-css --save-dev;将CSS压缩处理成一行(现在常用gulp-clean-css)

    cnpm install gulp-uglify --save-dev;生产环境下将JS压缩处理成一行

    cnpm install gulp-sourcemaps --save-dev

    cnpm install gulp-smushit --save-dev;图片压缩

    npm install gulp-rev --save-dev;对文件名加MD5后缀

    cnpm install gulp-rev-collector --save-dev;路径替换

    cnpm install run-sequence --save-dev

    cnpm install del --save-dev

    安装过程如下图

    --save-dev 是可以省掉你手动修改package.json文件的步骤,正常情况下得连同版本号手动将他们添加到模块配置文件package.json中的依赖里

    安装成功后的插件在package.json文件的devDependencies中可以看到,如下图

    PS:细心的你可能会发现,我们全局安装了gulp,项目也安装了gulp,全局安装gulp是为了执行gulp任务,本地安装gulp则是为了调用gulp插件的功能。

    更改gulp-rev和gulp-rev-collector(重要)

    1.打开node_modules\gulp-rev\index.js

      第135行: manifest[originalFile] = revisionedFile;

      更新为: manifest[originalFile] = originalFile + '?v=' + file.revHash;

    2.打开node_modules\rev-path\nodemodules\rev-path\index.js

    第9行:return modifyFilename(pth, (filename, ext) => `${filename}-${hash}${ext}`);

    更新为: returnmodifyFilename(pth, (filename, ext) =>`${filename}${ext}`);

    3.打开node_modules\gulp-rev-collector\index.js

    第40行: var cleanReplacement =  path.basename(json[key]).replace(new RegExp( opts.revSuffix ), '' );

    更新为: var cleanReplacement =path.basename(json[key]).split('?')[0];

    安装配置完成,要开始写代码啦。

    六、新建gulpfile.js文件(非常重要)

    在项目目录gulp_web下新建gulpfile.js文件,gulp有五种方法:task,run,watch,src,和dest.

    说明:gulpfile.js是gulp项目的配置文件,是位于项目根目录的普通js文件(其实将gulpfile.js放入其他文件夹下亦可)

    它的内容大致是这样的,如下:

    // 引入 gulp

    var gulp = require('gulp');

    // 引入组件

    var cssminify = require('gulp-minify-css');// 压缩CSS

    var uglify = require('gulp-uglify');// 生产环境下压缩JS

    var smushit = require('gulp-smushit');// 图片压缩

    var rev = require('gulp-rev');// 对文件名加MD5后缀(版本号)

    var revCollector = require('gulp-rev-collector');// 路径替换

    var runSequence = require('run-sequence');

    var del = require('del');

    // 创建一个名为css的任务

    gulp.task('css',function(){

    return gulp.src('./asset/css/*.css')// 该任务针对的css文件

           .pipe(cssminify())// 将css压缩处理成一行

           .pipe(rev())// 文件名加MD5后缀

           .pipe(gulp.dest('./build/css'))// 生成到根目录build文件夹下

           .pipe(rev.manifest())// 生成一个rev-manifest.json

           .pipe(gulp.dest('./rev/revcss'));// 将rev-manifest.json保存到revcss目录内

    });

    // 创建一个名为script的任务

    gulp.task('script',function(){

    return gulp.src('./asset/scripts/app/*.js')// 获取全部的js文件     

           .pipe(uglify())// 生产环境下将JS压缩处理成一行

           .pipe(rev())// 文件名加MD5后缀

           .pipe(gulp.dest('./build/scripts/app'))// 生成到根目录build文件夹下

           .pipe(rev.manifest())// 生成一个rev-manifest.json

           .pipe(gulp.dest('./rev/revjs'));// 将rev-manifest.json保存到revjs目录内

    });

    gulp.task('revHtml',function () {

    return gulp.src(['./rev/**/*.json','./asset/view/*.html'])// 读取rev-manifest.json文件以及需要进行css名替换的文件

           .pipe(revCollector())// 执行文件内css名和js名的替换

           .pipe(gulp.dest('./build/view'));// 替换后的文件输出的目录,Html更换css、js文件版本

    });

    // 在样式文件中修改的内容一旦保存可以直接在显示器显示渲染效果,无需刷新浏览器,这就是watch的功能。

    gulp.task('watch',function () {

    gulp.watch(['./asset/css/*.css'], ['css']);

    gulp.watch(['./asset/scripts/app/*.js'], ['script']);

    gulp.watch(['./rev/**/*.json','./asset/view/*.html'], ['revHtml']);

    });

    gulp.task('dev',function (done) {

    condition =false;

    runSequence(

    ['css'],

    ['script'],

    ['revHtml'],

    ['watch'],

    done);

    });

    // 执行命令gulp clean

    gulp.task('clean',function (cb) {

    del([

    // 这里我们使用一个通配模式来匹配 文件夹中的所有东西

           './build/css/*',

    './build/scripts/app/*',

           './build/view/*'

       ], cb);

    });

    // 执行命令gulp

    gulp.task('default', ['dev']);

    完成以上配置,现在开始写你的代码啦!代码写完再执行下面的七。

    七、运行gulp

    1、说明:命令提示符执行gulp 任务名称

    2、gulp clean 清空生成的文件

    3、当执行gulp default或gulp将会调用default任务里的所有任务

    八、使用webstorm运行gulp任务或者命令提示符执行gulp

    1、说明:使用webstorm可视化运行gulp任务;

    2、使用方法:将项目导入webstorm,右键gulpfile.js 选择”Show Gulp Tasks”打开Gulp窗口,若出现”No task found”,选择右键”Reload tasks”,双击运行即可。

    踩过的坑:

    来谈谈我遇到的一点小小的坑。

      代码敲完,需要回到命令行,运行gulp。直接输入gulp,就开始运行,期间会报一些error,不要紧张,指的是js文件里一些语法错误,无伤大雅,成功创建出压缩文件才是最终目的。

            那么如果需要修改代码,必须一直把cmd控制台保持打开状态,否则无法执行watch操作。第一点坑,就是编辑器的自动保存功能,一行代码如果写的不顺,或是中途打岔,比如‘$scope.’,还没接着写完,编辑器自动保存的功能会使jshint检查出语法错误,导致gulp的停止运行。

    如果用的是webstrom编辑器的,可以不用每次打开命令行,右键选中gulpfile.js,show gulp tasks,再点击default即可。

    操作过程中,我遇到的第二个坑就是安装gulp插件。由于我的电脑以前就安装过node,所以没有重新安装,导致运行cnpm install gulp --save-dev的时候,一直安装gulp报错,后来重新安装了最新版的node之后,再运行cnpm install gulp --save-dev就可以成功安装gulp了。

    遇到的第三个坑就是添加版本号,找了好几篇文章都说的不清楚,研究了好久才成功,以上我的代码是经过自己验证过才贴上去的,可以达到当修改asset里面的css和js,同步改变build里面的css和js的目的,同时会使得html里面的版本号发生改变,可解决缓存问题。

    相关文章

      网友评论

        本文标题:前端自动化构建工具gulp的安装和使用(包括添加版本号)

        本文链接:https://www.haomeiwen.com/subject/xondtftx.html