zoukankan      html  css  js  c++  java
  • gulp 自动化构建网站(版本号静态资源)

    前言

     新的一年啦,感觉总是静不下心,用了一天的时间吧,算是对gulp 这个前端打包工具入门了,自己也写了demo,表示对这个稍微理解了吧,

    当然还是有差距的啦,下面讲讲怎么用吧:

    如何用

     当然先去官网去看下如何使用的,这个是入门指南 https://www.gulpjs.com.cn/docs/getting-started/

    1. 全局安装

    $ npm install --global gulp 

    2你的項目裏 執行

    npm init

     全部回車 ,需要的地方在改下就好啦,這個沒有那么多要求,随意一点

    3. 项目安装 gulp

    npm install --save-dev gulp

     会自动产生 node_modules 这个目录 里面都是配置

    4.  在项目根目录下创建一个名为 gulpfile.js 的文件:

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

    然后这个是我的目录

     这个 dist 就是你的gulp 打包的文件

    gulpfile.js 这个文件就是写 一些脚本代码

     这个是我用到一些 gulp 的插件库,能帮你很多呢,上面也有注释

    然后就是 怎么压缩图片 压缩css, 压缩js 和合并,静态资源版本号(这个需要详情写点),

    上代码吧,上面都有注释,不懂的可以先看 gulp中文官网 会好理解点吧

      1 gulp.task('default', function (done) {
      2     browserSync.init({
      3         server: {
      4             baseDir: ["./dist"] // 服务器启动要打开的文件位置
      5         }
      6     });
      7     //gulp.watch("src/scss/**/*.scss",['sass']);
      8     gulp.watch("src/js/**/*.js", function (event) {
      9         console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
     10     });
     11     gulp.watch("src/**/*.html", function (event) {
     12         console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
     13     });
     14     gulp.watch("src/images/**/*.", function (event) {
     15         console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
     16     });
     17     gulp.watch("dist/**/*.html").on("change", browserSync.reload);
     18 
     19     // condition = false;
     20     // runSequence( //需要说明的是,用gulp.run也可以实现以上所有任务的执行,,故使用了runSequence.
     21     //     //['assetRev'],
     22     //     ['css'],
     23     //     ['js'],
     24     //     ['html'],
     25     //     done);
     26 });
     27 
     28 // 压缩css 文件hash编码并生成 rev-manifest.json文件名对照映射
     29 gulp.task('css', function () {
     30     gulp.src('src/css/*.css')
     31         //.pipe(cssver()) //给css文件里引用文件加版本号(文件MD5)
     32         .pipe(cssmin({
     33             advanced: false, //类型:Boolean 默认:true [是否开启高级优化(合并选择器等)]
     34             compatibility: 'ie7', //保留ie7及以下兼容写法 类型:String 默认:''or'*' [启用兼容模式; 'ie7':IE7兼容模式,'ie8':IE8兼容模式,'*':IE9+兼容模式]
     35             keepBreaks: true, //类型:Boolean 默认:false [是否保留换行]
     36             keepSpecialComments: '*'
     37             //保留所有特殊前缀 当你用autoprefixer生成的浏览器前缀,如果不加这个参数,有可能将会删除你的部分前缀
     38         }))
     39         // .pipe(rename(function(path){     //执行csso的压缩优化,然后重命名为*.min.css
     40         //     path.basename +=".min";
     41         //     path.extname = ".css"
     42         // }))
     43         .pipe(assetRev()) //该任务调用的模块 css中引入的图片/字体等添加hash编码
     44         .pipe(rev())
     45         .pipe(gulp.dest('dist/css'))  //控制的css输出到dist文件夹里
     46         .pipe(rev.manifest())  //对应的版本号用json表示出来,
     47         .pipe(gulp.dest('dist/rev/css'));
     48 });
     49 
     50 // 压缩js 文件
     51 gulp.task('js', function () {
     52     return gulp.src('src/js/**/*.js')
     53         .pipe(plumber())
     54         .pipe(minify())
     55         .pipe(rev())
     56         .pipe(gulp.dest('dist/js'))
     57         .pipe(rev.manifest())
     58         .pipe(gulp.dest("dist/rev/js"))
     59         .pipe(browserSync.stream());
     60 });
     61 
     62 //处理 html 文件 
     63 
     64 gulp.task('html', function () {
     65     return gulp.src(['dist/rev/**/*.json', "src/*.html"]) //编辑路径下的html 文件
     66         .pipe(plumber())
     67         .pipe(revCollector({
     68             replaceReved: true
     69         }))
     70         .pipe(gulp.dest("dist/")) //编辑好的文件
     71         .pipe(browserSync.stream());
     72 });
     73 
     74 // 在命令行输入 gulp images 启动此任务
     75 gulp.task('images', function () {
     76     // 1. 找到图片
     77     gulp.src('src/images/*.*')
     78         .pipe(imagemin({progressive: true })) // 2. 压缩图片
     79         .pipe(rev())
     80         .pipe(gulp.dest('dist/images')) // 3. 另存图片
     81         .pipe(rev.manifest('rev-img-manifest.json'))//生成一个rev-manifest.json
     82         .pipe(gulp.dest('dist/rev/images'));//将 rev-manifest.json 保存到 rev 目录内
     83 });
     84 
     85 // css 文件内的css 替换
     86 gulp.task('revimg', function() {
     87     //css,主要是针对img替换
     88     gulp.src(['dist/rev/images/**/rev-img-manifest.json', +'dist/css/*.css'])
     89         .pipe(revCollector({replaceReved:true }))
     90         .pipe(gulp.dest('dist/css'));
     91 });
     92 
     93 // Clean 任务执行前,先清除之前生成的文件
     94 gulp.task('clean', function (cb) {
     95     del(['dist/css', 'dist/js', 'dist/images','dist/rev','dist/*.html'], cb)
     96 });
     97 
     98 //  打包发布publish 
     99 gulp.task('publish', function () {
    100     return gulp.src('dist/**/*')
    101         .pipe(plumber())
    102         .pipe(zip('publish.zip'))
    103         .pipe(gulp.dest('release'))
    104 });
    View Code

    主要讲 gulp静态资源版本

    用到这几个吧

    npm install gulp-rename --save-dev (文件重命名)
    npm install gulp-asset-rev --save-dev (版本号 处理css图片路径哈希值的)
    npm install gulp-rev-collector --save-dev (gulp-rev的插件,HTML模板更改引用路径)
    npm install --save-dev run-sequence
    npm install gulp-rev --save-dev  (更改版本名) 

    代码也都在上面了,当然后还要改成想要的形式就是 楼主这样的

    <link rel="stylesheet" type="text/css" href="../../styles/common.css?v=a8aacfb">
    <script type="text/javascript" src="../../scripts/app_common.js?v=51921f3"></script>
    background:url(../images/none.png?v=8f204d4)

    需要改动几处地方:

     1.node_modules --> gulp-rev -->index.js  

        //manifest[originalFile] = revisionedFile;
        manifest[originalFile] = originalFile + '?v=' + file.revHash;

    2.node_modules --> gulp-rev-collector -->index.js   我是4.0的版本所以会有些不同但大小异同

     changes.push({
                   //regexp: new RegExp( prefixDelim + pattern, 'g' ),
                   regexp: new RegExp( prefixDelim + pattern+'(\?v=\w{10})?', 'g' ),
                   patternLength: pattern.length,
                   replacement: '$1' + manifest[key]
                 });

    3.node_modules --> gulp-asset-rev -->index.js

    //var verStr = (options.verConnecter || "-") + md5;
                            
    //src = src.replace(verStr, '').replace(/(.[^.]+)$/, verStr + "$1");
    
    var verStr = (options.verConnecter || "") + md5;
    
    src = src+"?v="+verStr;

    4.node_modules --> rev-path -->index.js

    //return modifyFilename(pth, (filename, ext) => `${filename}-${hash}${ext}`);

    return modifyFilename(pth, (filename, ext) => `${filename}${ext}`);

    然后就好啦, 主要把绿色的改成 下面的 黑色的就OK啦,

    最后执行 顺序呢:

    gulp clean
    gulp css
    gulp js
    gulp images
    gulp revimg
    gulp html

    这样你的dist 就有你想要的文件啦 和静态版本号啦,是不是很方便啦

    希望有帮助吧 ,哈哈  我们一起进阶 ,2019

  • 相关阅读:
    Win7系统安装Centos7.0双系统(二)
    vue动态加载图片失效
    vuex store更新了数据,但未触发getters
    js获取图片信息
    http请求204
    IOS 伪类:active失效
    js下载blob的形式
    URL的 ? 和 # (hash),如何将参数保存在URL中,用于刷新获取之前的变量?
    vue中修改数组,dom未更新的问题
    vue中使用qrcode,遇到两次渲染的问题
  • 原文地址:https://www.cnblogs.com/yf-html/p/10283915.html
Copyright © 2011-2022 走看看