<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題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
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 22:11:02
        文檔

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

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

        前言

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

      1. 尺寸單位
      2. 樣式導(dǎo)入
      3. 具體可參考wxss,此處不做過多贅述。

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

        目錄結(jié)構(gòu)

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

      4. build目錄用來配置我們的打包參數(shù),目前里面只有一個config.js文件
      5. dist目錄為打包輸出的目錄,也是小程序運行的目錄
      6. gulpfile.js配置打包的任務(wù)
      7. src就是我們的源代碼目錄
      8. src的目錄結(jié)構(gòu)如下:

        安裝依賴

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

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

        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是支持樣式導(dǎo)入的,也就是說import語法wxss是支持的,但css不支持,因此sass打包會把import的文件打包到當(dāng)前文件,從而導(dǎo)致當(dāng)前文件的體積變大。由于微信限制單包代碼不能超過2M,因此當(dāng)css越寫越多的時候,這種打包方式勢必會使樣式文件越來越大。

        解決import導(dǎo)入問題

        那如何解決import的導(dǎo)入問題呢,其實也比較簡單,說白了就是sass處理的時候,讓其不處理import部分的語句就可以了。有兩種方式可以做到,第一種是改寫sass處理的源碼,當(dāng)遇到import語句時跳過。第二種是,在把文件交給sass處理前,我們先把import語句部分注釋掉,這樣sass處理的時候就會忽略了,當(dāng)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) => {
         // 當(dāng)前處理文件的路徑
         const filePath = path.dirname(file.path);
         // 當(dāng)前處理內(nèi)容
         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外,也可以引入變量,函數(shù)。因此,我們在處理的時候也需要注意區(qū)分,變量和函數(shù)最好有一個獨立的文件目錄存放,并且在import的時候,對于變量和函數(shù),是必須交給sass處理的,也就是不能注釋掉。因此,在上面的代碼中,我們可以看到,我們引入了build目錄下的config,其配置了sass變量和函數(shù)存放的位置,這樣我們在打包的時候,遇到這樣的import語句,我們就跳過,交給sass處理,否則就代表其是引入了共用的樣式文件,這樣我們交給sass處理前,就先將其注釋掉,sass處理完成后再把注釋打開。另外,import的可能是一個scss文件,但在轉(zhuǎn)成wxss的時候,已經(jīng)將其后綴改為了wxss,因此,在將注釋打開的時候也需要更改相應(yīng)的引入,這也就是gulp-replace包的作用。config的配置如下:

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

        清理無用的wxss文件

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

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

        總結(jié)

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

        文檔

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

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

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 免费中文字幕一级毛片| 免费一级不卡毛片| 女人被免费视频网站| 7777久久亚洲中文字幕蜜桃 | 毛片a级三毛片免费播放| 亚洲日韩国产精品无码av| 一区二区在线免费观看| 99久久亚洲综合精品成人网| 鲁大师在线影院免费观看 | 亚洲av无码专区亚洲av不卡 | 亚洲美女在线国产| 男女交性无遮挡免费视频| 色久悠悠婷婷综合在线亚洲| 国产在线国偷精品免费看| 色噜噜综合亚洲av中文无码| 国产曰批免费视频播放免费s| 亚洲人配人种jizz| 又黄又爽一线毛片免费观看| xvideos永久免费入口| 国产成人亚洲综合色影视| 亚洲免费在线观看视频| 亚洲精品无码专区在线播放| vvvv99日韩精品亚洲| 最近免费mv在线观看动漫| 亚洲一区在线视频观看| 日本成人免费在线| 怡红院免费全部视频在线视频| 日韩精品一区二区亚洲AV观看 | 中字幕视频在线永久在线观看免费| 亚洲午夜理论片在线观看| 亚洲情a成黄在线观看| 久久aⅴ免费观看| 亚洲国产AV一区二区三区四区| 国产成人精品曰本亚洲79ren| 8888四色奇米在线观看免费看| 亚洲熟妇久久精品| 亚洲AV无码日韩AV无码导航| 精品熟女少妇AV免费观看| 中国一级毛片视频免费看| 亚洲欧美日韩中文二区| 亚洲va国产va天堂va久久|