美文网首页饥人谷技术博客让前端飞web前端技术分享
使用gulp给css添加前缀以支持多浏览器(附源码)

使用gulp给css添加前缀以支持多浏览器(附源码)

作者: 阿巳交不起水电费 | 来源:发表于2022-02-18 09:25 被阅读0次

    之前遇到这样一个需求:已经运行的老项目(是用jquery开发的多页面)之前只是兼容chrome,现在样式需要兼容ie10+,safari等浏览器。因为less、css文件太多,一个一个手动添加前缀等不太现实,因为不需要重新编译js等其他资源,也不需要入口文件,因此没有使用webpack,而是使用更简单的gulpgulp中文官网

    目录结构如下:

    image.png

    gulpfile.js

    const gulp = require('gulp');
    
    const pump = require('pump') // 辅助模块pump可以使我们更容易找到代码出错位置.
    
    // 添加css前缀,postcss算是一种平台,可以使用插件来处理css,它提供了一个解释器,能够将css解释为抽象语法树
    // const autoprefixer = require('gulp-autoprefixer'); // 不使用postcss直接使用gulp-autoprefixer也可以
    const postcss = require('gulp-postcss'); // 使用postcss加载autoprefixer等插件更好,推荐使用
    const autoprefixer = require('autoprefixer');
    
    const less = require('gulp-less');
    const sass = require('gulp-sass')(require('sass'));
    
    const clean = require('gulp-clean');// 清理文件或文件夹
    
    let _src = '../www/static/css/'
    
    let _output = './dist/'
    
    gulp.task('clean', function () {
        // task任务里要加上return 不然还是会异步执行
       return gulp.src(_output, {read: false})
            .pipe(clean());
    })
    
    // 公共处理css前缀方法
    let afn = function () {
        return postcss([
            autoprefixer({
                overrideBrowserslist: ['last 2 versions', 'iOS >= 8', 'Firefox >= 20', 'Android > 4.0'],
                cascade: true //是否美化属性值 默认:true 像这样:
            })
        ])
    }
    
    // 编译css
    gulp.task('css', function () {
        return gulp.src(_src + '*.css')
            .pipe(afn())
            .pipe(gulp.dest(_output));
    });
    
    // 编译less
    gulp.task('less', function () {
        return gulp.src(_src + '*.less')
            .pipe(less())
            .pipe(afn())
            .pipe(gulp.dest(_output));
    });
    
    // 编译sass
    gulp.task('sass', function () {
        return gulp.src(_src + '*.scss')
            .pipe(sass())
            .pipe(afn())
            .pipe(gulp.dest(_output));
    });
    
    gulp.task('default', gulp.series('clean','css', // 先执行css,后面若less或者sass生成了同名文件将覆盖,less,sass生成的文件优先级最高
        gulp.parallel('less', 'sass'),
    ));
    

    package.json

    {
      "name": "y",
      "version": "1.0.0",
      "description": "",
      "main": "gulpfile.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "clean": "gulp clean",
        "build": "gulp default"
      },
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "gulp": "^4.0.2",
        "gulp-autoprefixer": "^8.0.0",
        "gulp-clean": "^0.4.0",
        "gulp-less": "^5.0.0",
        "gulp-postcss": "^9.0.1",
        "gulp-sass": "^5.0.0",
        "pump": "^3.0.0"
      },
      "dependencies": {
        "autoprefixer": "^10.4.0",
        "sass": "^1.43.4"
      }
    }
    
    image.png

    执行:

    cd css编译 // 进入编译目录
    npm i // 安装依赖
    npm run build // 开始编译
    

    整个编译思路就是将www/static/css里面的css、sass、less生成到编译目录里的dist目录,可以根据需求自行修改。

    相关文章

      网友评论

        本文标题:使用gulp给css添加前缀以支持多浏览器(附源码)

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