Jw
首页
技术
英语
首页
技术
英语
  • 工具与环境

    • Node

      • NVM 安装与 Node 版本管理
      • NVM 公共 npm 目录
      • npm 常用命令
      • cnpm 淘宝镜像
    • 构建工具

      • Gulp 安装与配置
      • Gulp 文件路径匹配
      • Gulp 监听 SCSS
    • 版本控制

      • Git 常用命令
    • 编辑器

      • VS Code 常用插件
    • 文档工具

      • GitBook 安装与使用
      • GitBook 常用插件
      • Markdown 基本语法
    • 其他

      • 代理网易云音乐

Gulp 监听 SCSS 并输出 wxss

监听 scss 变更、按目录映射输出 wxss,适配小程序分包结构。

只能单文件监听,公共scss编译后,暂时无法触发全scss文件重现编译


    // 针对性输出文件,目前配置只能对单文件进行监听输出
    // 多数插件只能用cnpm安装,安装插件时切换淘宝镜像

    var gulp = require("gulp");                         // 定义任务
    var gulpPlumber = require("gulp-plumber");          // 禁止报错终止监听,弹出暴露信息
    var gulpSass = require("gulp-sass");                // sass转换压缩
    var gulpRename = require("gulp-rename");            // 重命名,定义详细输出路径
    var debug = require('gulp-debug');                  // 输出调试信息
    var autoprefixer = require('gulp-autoprefixer');    // css兼容前缀添加

    var PROJECT_NAME = 'SquashWX'                       // 要监听的项目
    var OUTPUT_DIRNEME = 'subpackages';                 // 输出文件的上级dir所在目录  // subpackages pages  components
    var OUT_PUT_FILE_EXTNAME = '.wxss'                  // 输出文件格式
    var SCSS_FOLDER_NAME = 'scss'                       // scss 存放的目录名,映射 scss 目录结构进行输出

    // scss 里面的路径
    function getScssFilePath(pathString){
        return pathString.substring(pathString.indexOf(`${SCSS_FOLDER_NAME}\\`)+5,pathString.indexOf('.'));
    }

    // 监听scss
    gulp.task("watchscss",function(){
        gulp.watch(`./${PROJECT_NAME}/**/*.scss`).on('change',function(path){
            var fileName = getScssFilePath(path).substring(getScssFilePath(path).indexOf('\\')+1);
            if( fileName == 'public' || fileName == 'style' || fileName == 'static')return;
            gulp.src(path)
            .pipe(debug())
            .pipe(gulpPlumber())
            .pipe(gulpSass({
                outputStyle: 'compact'
            }))
            .pipe(autoprefixer([
            'iOS >= 8',
            'Android >= 4.1'
            ]))
            .pipe(gulpRename({
                dirname: getDirnameRule(OUTPUT_DIRNEME,path,fileName),
                extname: OUT_PUT_FILE_EXTNAME
            }))
            .pipe(gulp.dest(`./${PROJECT_NAME}/${OUTPUT_DIRNEME}`))
            .pipe(debug())
        })
    })


    function getDirnameRule(OUTPUT_DIRNEME,path,fileName){
        if(OUTPUT_DIRNEME == 'pages') return getScssFilePath(path);                                              // 主包层级映射
        if(OUTPUT_DIRNEME == 'subpackages') return `${getScssFilePath(path).replace('\\','\\pages\\')}`;    // 分包时对页面独立存放映射
        return fileName;                                                                                    // 其余直接映射
    }





相关

  • Gulp 安装与配置:任务与插件基础
  • VS Code 常用插件:Easy Sass 等编译插件
最近更新: 2026/10/12 09:08
Contributors: liujw
Prev
Gulp 文件路径匹配