zoukankan      html  css  js  c++  java
  • 前端自动化工具环境搭建 整理备份

    入门环境搭建

    webpack  入门环境搭建

    gulp  入门环境搭建

    我的 gulp 配置文件

    //A 加载插件:
    // 1 引入 gulp及组件
    var gulp = require('gulp'),   //* /这个是必须安装的,没有它,其它组件都用不了(注意watch组件直接集成在gulp中了,无需额外安装watch组件)
      
        minifycss = require('gulp-clean-css'),      //压缩css   ulp-minify-css 已被废弃 
        uglify = require('gulp-uglify'),            //压缩JS  *
        imagemin = require('gulp-imagemin'),       //压缩图片  *
         htmlmin = require('gulp-htmlmin'),  //gulp-htmlmin本身就有对页面上js、css的压缩支持,配置参数即可,无需再使用其他插件
        requirejsOptimize = require('gulp-requirejs-optimize'),   //require 打包文件
       
     
       // jshint = require('gulp-jshint'),            //js代码校验
        rename = require('gulp-rename'),             
        concat = require('gulp-concat'), //合并js文件
        notify = require('gulp-notify'),  //更改提醒
        cache = require('gulp-cache'),   //缓存当前任务中的文件,只让已修改的文件通过管道  *
        livereload = require('gulp-livereload'), //自动刷新页面   当代码变化时,它可以帮我们自动刷新页面 插件最好配合谷歌浏览器来使用,且要安装livereload chrome extension扩展插件,不能下载的请自行FQ。
        del = require('del'); 
        
      var rjs = require('requirejs');   //https://github.com/phated/requirejs-example-gulpfile/blob/master/gulpfile.js
     
     
     //npm update -g minimatch@3.0.2
    //npm install gulp-autoprefixer gulp-clean-css gulp-jshint gulp-concat gulp-uglify gulp-imagemin gulp-notify gulp-rename gulp-livereload gulp-cache del --save-dev
       
     //B 建立任务: 
     //gulp.task(name[, deps], fn) 定义任务  name:任务名称 deps:依赖任务名称 fn:回调函数
    //gulp.src(globs[, options]) 执行任务处理的文件  globs:处理的文件路径(字符串或者字符串数组) 
    //gulp.dest(path[, options]) 处理完后文件生成路径
     
     
     //0 管理html
    gulp.task('html', function () {
        var options = {
            removeComments: true,  //清除HTML注释
            collapseWhitespace: true,  //压缩HTML
            collapseBooleanAttributes: true,  //省略布尔属性的值 <input checked="true"/> ==> <input checked />
            removeEmptyAttributes: true,  //删除所有空格作属性值 <input id="" /> ==> <input />
            removeScriptTypeAttributes: true,  //删除<script>的type="text/javascript"
            removeStyleLinkTypeAttributes: true,  //删除<style>和<link>的type="text/css"
            minifyJS: true,  //压缩页面JS
            minifyCSS: true  //压缩页面CSS
        };
        gulp.src('src/*.html')
            .pipe(htmlmin(options))
            .pipe(gulp.dest('dist/'))
            .pipe(notify({ message: 'html task complete' }));
    });
     
    // 1管理样式 Styles
    gulp.task('pagestyles', function() {
    return gulp.src('src/css/pages/*.css')  //需要压缩的css 
           // .pipe(rename({ suffix: '.min' }))  //重命名
            .pipe(minifycss())  //压缩
            .pipe(gulp.dest('dist/css/pages'))  //压缩到新的目录
            .pipe(notify({ message: 'pages styles  task complete' }));  //通知
    });
    
    gulp.task('commonstyles', function() {
    return gulp.src('src/css/common/*.css')  //需要压缩的css 
            //.pipe(rename({ suffix: '.min' }))  //重命名
            .pipe(minifycss())  //压缩
            .pipe(gulp.dest('dist/css/common'))  //压缩到新的目录
            .pipe(notify({ message: 'common styles  task complete' }));  //通知
    });
    
    
    
    
    
    //2 管理脚本  script
    
    gulp.task('pagesjs', function() {
      return gulp.src('src/js/pages/*.js')
       // .pipe(jshint())  // js代码检查
       // .pipe(jshint.reporter()) // 输出检查结果
        //.pipe(concat('all.js'))
        //.pipe(rename({ suffix: '.min' }))
        .pipe(uglify())
        .pipe(gulp.dest('dist/js/pages/'))
        .pipe(notify({ message: 'pagesjs task complete' }));
    });
    
    gulp.task('commonjs', function() {
      return gulp.src('src/js/common/*.js')
      //  .pipe(jshint('.jshintrc'))
        //.pipe(jshint.reporter('default'))
        //.pipe(concat('all.js'))
       // .pipe(rename({ suffix: '.min' }))
        .pipe(uglify())
        .pipe(gulp.dest('dist/js/common/'))
        .pipe(notify({ message: 'commonjs task complete' }));
    });
    
    
    
    //3 管理图片  Images
    
    gulp.task('imagesview', function() {
      return gulp.src('src/images/view/*.{png,jpg,gif,ico}')
        .pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true })))
         // 取值范围:0-7(优化等级),是否无损压缩jpg图片,是否隔行扫描gif进行渲染,是否多次优化svg直到完全优化
        .pipe(gulp.dest('dist/images/view/'))
        .pipe(notify({ message: 'Images1 task complete' }));
    });
    gulp.task('imagespic', function() {
      return gulp.src('src/images/pic/*')
        .pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true })))
        .pipe(gulp.dest('dist/images/pic/'))
        .pipe(notify({ message: 'Images2 task complete' }));
    });
    
    
    
    // Clean  任务执行前,先清除之前生成的文件
    gulp.task('clean', function(cb) {
       del(['dist/css/*', 'dist/js/*'], cb);
    });
    
    
    
     //C 监听文件:
     // Watch
    
    gulp.task('watch', function(event) {  // 使用Ctrl+c退出任务
          //console.log(event.changed); //变化类型 added为新增,deleted为删除,changed为改变 
        
        //Watch *html files
        gulp.watch('src/*.html', ['html']); //* ok
        
      // Watch .css files
       gulp.watch('src/css/common/*.css', ['commonstyles']);
       gulp.watch('src/css/pages/*.css', ['pagestyles']); //* ok
       
      // Watch .js files
      //gulp.watch('src/js/*/*.js', ['pagesjs,commonjs']);  //这个不可以  暂时不知到为啥
      gulp.watch('src/js/pages/*.js', ['pagesjs']);
      gulp.watch('src/js/common/*.js', ['commonjs']);
      
      // Watch image files
      //gulp.watch('src/images/*/*', ['imagesview','imagespic']);
      gulp.watch('src/images/view/*',['imagesview']);
      gulp.watch('src/images/pic/*', ['imagesview']);
      
      // Create LiveReload server
      livereload.listen();
      // Watch any files in dist/, reload on change
      gulp.watch(['dist/**']).on('change', livereload.changed);
    
    });
     
     ///D 设定默认任务    每个gulpfile.js里都应当有一个dafault任务,它是缺省任务入口(类似C语言的main()
     gulp.task('default', function () {  
           //gulp.run('sass','minjs','mincss');   //gulp.run(tasks)表示运行对应的任务,这里表示执行名为'sass','minjs','mincss'的三个任务
        gulp.run('watch');    //执行'watch'监听任务
     })
     

    关于前端跨域调试

    在进行接口请求时,我们的页面通常是在sublime的本地服务器或者vscode本地服务器预览,所以请求接口会遇到跨域的问题。
    在项目构建的时候通常我们源代码会放在src文件夹下,然后使用gulp进行代码的压缩、合并、图片的优化(根据需要)等等,我们会使用gulp。这里解决跨域的问题可以用gulp-connect结合http-proxy-middleware,此时我们在gulp-connect中的本地服务器进行预览调试。
    gulpfile.js如下: 开发过程使用gulp server命令,监听文件改动并使用livereload刷新;使用gulp命令进行打包。

    var gulp = require('gulp');
    var concat = require('gulp-concat');
    var uglify = require('gulp-uglify');
    var autoprefixer = require('gulp-autoprefixer');
    var useref = require('gulp-useref');
    var connect = require('gulp-connect');
    var proxyMiddleware = require('http-proxy-middleware');
    // 定义环境变量,若为 dev,则代理src目录; 若为prod,则代理dist目录
    var env = 'prod'
    // 跨域代理  将localhost:8088/api 映射到 https://api.shujumohe.com/
    gulp.task('server', ['listen'], function() {
        var middleware = proxyMiddleware(['/api'], {
            target: 'https://api.shujumohe.com/',
            changeOrigin: true,
            pathRewrite: {
                '^/api': '/'
            }
        });
        connect.server({
            root: env == 'dev' ? './src' : './dist',
            port: 8088,
            livereload: true,
            middleware: function(connect, opt) {
                return [middleware]
            }
        });
    });
    gulp.task('html', function() {
        gulp.src('src/*.html')
            .pipe(useref())
            .pipe(gulp.dest('dist'));
    });
    gulp.task('css', function() {
        gulp.src('src/css/main.css')
            .pipe(concat('main.css'))
            .pipe(autoprefixer({
                browsers: ['last 2 versions'],
                cascade: false
            }))
            .pipe(gulp.dest('dist/css/'));
        gulp.src('src/css/share.css')
            .pipe(concat('share.css'))
            .pipe(autoprefixer({
                browsers: ['last 2 versions'],
                cascade: false
            }))
            .pipe(gulp.dest('dist/css/'));
        gulp.src('src/vendors/css/*.css')
            .pipe(concat('vendors.min.css'))
            .pipe(autoprefixer({
                browsers: ['last 2 versions'],
                cascade: false
            }))
            .pipe(gulp.dest('dist/vendors/css'));
        return gulp
    });
    gulp.task('js', function() {
        return gulp.src('src/vendors/js/*.js')
            .pipe(concat('vendors.min.js'))
            .pipe(uglify())
            .pipe(gulp.dest('dist/vendors/js'));
    });
    gulp.task('img', function() {
        gulp.src('src/imgs/*')
            .pipe(gulp.dest('dist/imgs'));
    });
    gulp.task('listen', function() {
        gulp.watch('./src/css/*.css', function() {
            gulp.src(['./src/css/*.css'])
                .pipe(connect.reload());
        });
        gulp.watch('./src/js/*.js', function() {
            gulp.src(['./src/js/*.js'])
                .pipe(connect.reload());
        });
        gulp.watch('./src/*.html', function() {
            gulp.src(['./src/*.html'])
                .pipe(connect.reload());
        });
    });
    gulp.task('default', ['html', 'css', 'js', 'img']);
  • 相关阅读:
    json的序列化与反序列化
    Npoi简单读写Excel
    Halcon一维运算相关算子整理
    C#委托的介绍(delegate、Action、Func、predicate)
    设计模式
    Halcon 和 C# 联合编程
    UVA-11324 The Largest Clique (强连通+DP)
    UVALive-4287 Proving Equivalences (有向图的强连通分量)
    UVALive-5135 Mining Your Own Business (无向图的双连通分量)
    UVALive-3523 Knights of the Round Table (双连通分量+二分图匹配)
  • 原文地址:https://www.cnblogs.com/surfaces/p/8462087.html
Copyright © 2011-2022 走看看