• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    詳解如何在微信小程序中愉快地使用sass

    來源:懂視網 責編:小采 時間:2020-11-27 22:11:02
    文檔

    詳解如何在微信小程序中愉快地使用sass

    詳解如何在微信小程序中愉快地使用sass:前言 在微信小程序中,css是用wxss來表示,但寫法基本一致。需要注意的是wxss擴展了兩個特性,分別是: 尺寸單位 樣式導入 具體可參考wxss,此處不做過多贅述。 為了方便打包sass,我們使用gulp來處理我們的scss文件,將其轉換為wxss。 目錄結構 在開
    推薦度:
    導讀詳解如何在微信小程序中愉快地使用sass:前言 在微信小程序中,css是用wxss來表示,但寫法基本一致。需要注意的是wxss擴展了兩個特性,分別是: 尺寸單位 樣式導入 具體可參考wxss,此處不做過多贅述。 為了方便打包sass,我們使用gulp來處理我們的scss文件,將其轉換為wxss。 目錄結構 在開

    前言

    在微信小程序中,css是用wxss來表示,但寫法基本一致。需要注意的是wxss擴展了兩個特性,分別是:

  • 尺寸單位
  • 樣式導入
  • 具體可參考wxss,此處不做過多贅述。

    為了方便打包sass,我們使用gulp來處理我們的scss文件,將其轉換為wxss。

    目錄結構

    在開發中,我們一般會有一個src源代碼目錄,一個dist目錄用來輸出我們打包的代碼。而本次講解用到的目錄結構如下:

  • build目錄用來配置我們的打包參數,目前里面只有一個config.js文件
  • dist目錄為打包輸出的目錄,也是小程序運行的目錄
  • gulpfile.js配置打包的任務
  • src就是我們的源代碼目錄
  • src的目錄結構如下:

    安裝依賴

    yarn add gulp gulp-sass gulp-rename gulp-replace gulp-tap gulp-clean -D

    gulp和gulp-sass為打包sass必須,gulp-rename則負責把scss后綴改為wxss,gulp-replace負責內容的替換(這個后面會講到),gulp-tap用來處理當前執行的文件,gulp-clean負責清除我們不需要的文件。

    sass打包配置

    gulp配置打包sass非常簡單,代碼如下:

    const gulp = require('gulp');
    const sass = require('gulp-sass');
    const rename = require('gulp-rename');
    
    gulp.task('sass', () => gulp.src('./src/**/*.{scss,wxss}')
     .pipe(sass().on('error', sass.logError))
     .pipe(rename({
     extname: '.wxss'
     }))
     .pipe(gulp.dest('./dist'))
    );

    這樣就可以完成了sass的配置,但是這樣會有問題。前面講到了wxss是支持樣式導入的,也就是說import語法wxss是支持的,但css不支持,因此sass打包會把import的文件打包到當前文件,從而導致當前文件的體積變大。由于微信限制單包代碼不能超過2M,因此當css越寫越多的時候,這種打包方式勢必會使樣式文件越來越大。

    解決import導入問題

    那如何解決import的導入問題呢,其實也比較簡單,說白了就是sass處理的時候,讓其不處理import部分的語句就可以了。有兩種方式可以做到,第一種是改寫sass處理的源碼,當遇到import語句時跳過。第二種是,在把文件交給sass處理前,我們先把import語句部分注釋掉,這樣sass處理的時候就會忽略了,當sass處理完成后,再把注釋掉的語句打開即可。顯然第一種成本比較高,也不好維護。我們采用第二種,代碼如下:

    const gulp = require('gulp');
    const sass = require('gulp-sass');
    const replace = require('gulp-replace');
    const rename = require('gulp-rename');
    const clean = require('gulp-clean');
    const tap = require('gulp-tap');
    const path = require('path');
    
    const config = require('./build/config');
    
    const hasRmCssFiles = new Set();
    gulp.task('sass', () => gulp.src('./src/**/*.{scss,wxss}')
     .pipe(tap((file) => {
     // 當前處理文件的路徑
     const filePath = path.dirname(file.path);
     // 當前處理內容
     const content = file.contents.toString();
     // 找到filter的scss,并匹配是否在配置文件中
     content.replace(/@import\s+['|"](.+)['|"];/g, ($1, $2) => {
     const hasFilter = config.cssFilterFiles.filter(item => $2.indexOf(item) > -1);
     // hasFilter > 0表示filter的文件在配置文件中,打包完成后需要刪除
     if (hasFilter.length > 0) {
     const rmPath = path.join(filePath, $2);
     // 將src改為dist,.scss改為.wxss,例如:'/xxx/src/scss/const.scss' => '/xxx/dist/scss/const.wxss'
     const filea = rmPath.replace(/src/, 'dist').replace(/\.scss/, '.wxss');
     // 加入待刪除列表
     hasRmCssFiles.add(filea);
     }
     });
     console.log('rm', hasRmCssFiles);
     }))
     .pipe(replace(/(@import.+;)/g, ($1, $2) => {
     const hasFilter = config.cssFilterFiles.filter(item => $1.indexOf(item) > -1);
     if (hasFilter.length > 0) {
     return $2;
     }
     return `/** ${$2} **/`;
     }))
     .pipe(sass().on('error', sass.logError))
     .pipe(replace(/(\/\*\*\s{0,})(@.+)(\s{0,}\*\*\/)/g, ($1, $2, $3) => $3.replace(/\.scss/g, '.wxss')))
     .pipe(rename({
     extname: '.wxss',
     }))
     .pipe(gulp.dest('./dist')));

    在處理import的時候,還有個地方是需要注意的。在sass中,import除了能引入css外,也可以引入變量,函數。因此,我們在處理的時候也需要注意區分,變量和函數最好有一個獨立的文件目錄存放,并且在import的時候,對于變量和函數,是必須交給sass處理的,也就是不能注釋掉。因此,在上面的代碼中,我們可以看到,我們引入了build目錄下的config,其配置了sass變量和函數存放的位置,這樣我們在打包的時候,遇到這樣的import語句,我們就跳過,交給sass處理,否則就代表其是引入了共用的樣式文件,這樣我們交給sass處理前,就先將其注釋掉,sass處理完成后再把注釋打開。另外,import的可能是一個scss文件,但在轉成wxss的時候,已經將其后綴改為了wxss,因此,在將注釋打開的時候也需要更改相應的引入,這也就是gulp-replace包的作用。config的配置如下:

    module.exports = {
     cssFilterFiles: ['scss/var.scss'],
    };

    清理無用的wxss文件

    前面講了,我們在sass中可能會定義一些變量,函數,這些文件一會一并打包到dist目錄,但其內容是空的,這時候我們就需要對其進行清理,前面在打包過程中,我們有一個set變量hasRmCssFiles記錄了相應的文件,這樣我們遍歷這個變量即可刪除相應的文件,代碼如下:

    gulp.task('clean:wxss', () => {
     const arr = [];
     hasRmCssFiles.forEach((item) => {
     arr.push(item);
     });
     return gulp.src(arr, { read: false })
     .pipe(clean({ force: true }));
    });

    總結

  • wxss的特性
  • sass打包配置以及如何處理import語句
  • sass變量、函數的文件清理
  • 聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    詳解如何在微信小程序中愉快地使用sass

    詳解如何在微信小程序中愉快地使用sass:前言 在微信小程序中,css是用wxss來表示,但寫法基本一致。需要注意的是wxss擴展了兩個特性,分別是: 尺寸單位 樣式導入 具體可參考wxss,此處不做過多贅述。 為了方便打包sass,我們使用gulp來處理我們的scss文件,將其轉換為wxss。 目錄結構 在開
    推薦度:
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 中文字幕精品久久| 日本内射精品一区二区视频 | 777被窝午夜精品影院| 亚洲国产精品成人精品无码区| 国产成人精品视频2021| 91原创国产精品| 久久精品国产亚洲AV香蕉| 国产在线观看一区精品| 国产成人精品免费午夜app| 亚洲欧美精品AAAAAA片| 国内精品久久久久久不卡影院| 精品综合久久久久久97超人| 久久精品亚洲一区二区三区浴池 | 91精品国产麻豆国产自产在线 | 国产99久久久国产精品~~牛| 国产麻豆一精品一AV一免费| 亚洲综合国产精品第一页 | 国产亚洲精品无码成人| 无码精品视频一区二区三区| 日本五区在线不卡精品| 久久精品成人免费国产片小草| 麻豆精品不卡国产免费看| 国产精品无码久久综合| 人妻熟妇乱又伦精品视频| 欧美精品黑人粗大| 国内精品国语自产拍在线观看| 99久久99久久精品国产片果冻| 免费精品99久久国产综合精品| 成人午夜精品网站在线观看| 亚洲国产精品特色大片观看完整版 | 精品久久久久久无码人妻热 | 国产三级精品三级在线专区1| 亚洲欧美日韩久久精品第一区| 欧美日韩精品系列一区二区三区国产一区二区精品 | 亚洲Av无码精品色午夜| 亚洲精品无码专区久久同性男| 国产精品欧美一区二区三区| 久久青青草原精品影院| 69久久夜色精品国产69| 欧美精品欧美人与动人物牲交| 热RE99久久精品国产66热|