亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 13:23:30
字體:
來源:轉載
供稿:網友

前言

在微信小程序中,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變量、函數的文件清理

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人精品在线视频| 欧美日韩国产中文精品字幕自在自线| 国产噜噜噜噜噜久久久久久久久| 久久久国产91| 成人福利网站在线观看| 2020国产精品视频| 日韩一中文字幕| 俺去了亚洲欧美日韩| 萌白酱国产一区二区| 中文字幕日韩精品在线| 91亚洲永久免费精品| 亚洲色图15p| 国产成+人+综合+亚洲欧美丁香花| 51色欧美片视频在线观看| 韩国精品美女www爽爽爽视频| 中文字幕日韩欧美在线| 91在线无精精品一区二区| 日本精品va在线观看| 国外成人在线播放| 91亚洲精品久久久久久久久久久久| 日本精品久久久| 欧美激情亚洲国产| 91精品在线影院| 亚洲欧美中文日韩v在线观看| 国产成人中文字幕| 国产精品国产自产拍高清av水多| 国产成人在线精品| 亚洲国产精品福利| 国产99视频在线观看| 日韩成人av在线播放| 91精品国产乱码久久久久久蜜臀| 91在线|亚洲| 欧美xxxx做受欧美| 国产精品福利在线观看网址| 国产欧美一区二区三区在线| 亚洲黄色av女优在线观看| 久久精视频免费在线久久完整在线看| 欧美日韩高清在线观看| 国产91在线播放| 欧美专区在线播放| 亚洲最大福利视频网| 久久人人爽人人| 亚洲国产美女精品久久久久∴| 久久国产精品久久久久久久久久| 成人免费视频网| 深夜福利一区二区| 亚洲综合色av| 成人日韩在线电影| 91人人爽人人爽人人精88v| 国产精品嫩草影院久久久| 国产美女主播一区| www.久久草.com| 国产精品毛片a∨一区二区三区|国| 精品久久国产精品| 欧美成人精品在线观看| 亚洲国产欧美精品| 欧美野外猛男的大粗鳮| 国产精品一区=区| 久久精品国产久精国产思思| 国产精品亚洲自拍| 亚洲a∨日韩av高清在线观看| 在线国产精品播放| 正在播放欧美视频| 欧美精品激情blacked18| 亚洲欧美日本伦理| 久久天天躁夜夜躁狠狠躁2022| 精品国产视频在线| 亚洲有声小说3d| 亚洲午夜小视频| 精品久久久久久亚洲精品| 欧美激情欧美激情| 日韩激情av在线播放| 中文精品99久久国产香蕉| 亚洲欧洲日产国产网站| 亚洲欧美综合精品久久成人| 亚洲白虎美女被爆操| 奇米成人av国产一区二区三区| 欧美日韩免费观看中文| 欧美性猛交xxxx黑人| 中文在线资源观看视频网站免费不卡| 成人高h视频在线| 精品亚洲一区二区三区四区五区| 欧洲永久精品大片ww免费漫画| 高清亚洲成在人网站天堂| 久久资源免费视频| 亚洲欧美精品中文字幕在线| 亚洲免费视频一区二区| 国产主播喷水一区二区| 理论片在线不卡免费观看| 国产欧美一区二区白浆黑人| 美女黄色丝袜一区| 亚洲第一国产精品| 成人免费网视频| 欧美另类极品videosbest最新版本| 欧美高清一级大片| 日本19禁啪啪免费观看www| 欧美精品videos另类日本| 国产欧美在线视频| 一区二区三区回区在观看免费视频| www国产精品com| 成人a免费视频| 性夜试看影院91社区| 国内精品久久久久伊人av| 成人激情视频免费在线| 97视频国产在线| 久久精品国产亚洲精品| 国产精品福利无圣光在线一区| 亚洲高清久久久久久| 狠狠躁天天躁日日躁欧美| 国产精品久久久久久中文字| 韩国三级电影久久久久久| 精品国产一区二区三区四区在线观看| 欧美极品美女视频网站在线观看免费| 国产精品久久久久久久久久尿| 日韩中文字幕在线播放| 亚洲男人天堂古典| 亚洲人精品午夜在线观看| 国产精品吊钟奶在线| 成人中文字幕在线观看| 日本a级片电影一区二区| 51视频国产精品一区二区| 日韩精品视频在线免费观看| 亚洲精品国产福利| 91网站在线看| 国内精品模特av私拍在线观看| 91老司机在线| 国产欧美一区二区三区久久| 中文字幕免费精品一区高清| 久久视频在线免费观看| 97人人模人人爽人人喊中文字| 欧美激情视频一区二区| 97视频人免费观看| 亚洲精品国偷自产在线99热| 夜夜狂射影院欧美极品| 亚洲福利在线视频| www.午夜精品| 欧美日韩国产在线| 97久久久免费福利网址| 国产精品日韩欧美| 亚洲欧美第一页| 在线免费看av不卡| 九色成人免费视频| 国产成人在线一区二区| 亚洲在线免费观看| 久久福利网址导航| 97成人精品区在线播放| 91亚洲精品久久久| 国产一区二区久久精品| 98精品在线视频| 欧美日韩国产va另类| 欧美专区在线视频| 日韩视频永久免费观看| 国产亚洲欧洲黄色| 日韩av免费一区| 欧美成人精品影院| 色婷婷成人综合| 夜夜嗨av色综合久久久综合网| 一区二区三区动漫| 国产999在线观看| 亚洲精品视频在线播放| 久久国产精品久久久久久久久久| 性欧美激情精品| 精品一区二区三区三区| 欧美有码在线观看|