這可能是小程序使用 tailwindcss 開發(fā)的最佳方案

logo.jpg

這可能是小程序使用 tailwindcss 開發(fā)的最佳方案

筆者對 tailwindcss 的理解還算比較到位拾并,也寫了不少的 preset/plugin 和許多的 postcss 插件。

最近這個月,我發(fā)布了 weapp-tailwindcss-webpack-plugin2.x 版本署穗,與之前的版本相比,大大增強了我們開發(fā)者的開發(fā)體驗嵌洼,尤其是類jsx 框架相關的體驗案疲。

接下來,讓我們快速開始吧麻养!

快速開始

一.安裝與配置 tailwindcss

1. npm安裝 tailwindcss

# npm / yarn / pnpm 
npm install -D tailwindcss postcss autoprefixer
# 生成 tailwind.config.js 文件
npx tailwindcss init

2. 把 tailwindcss 注冊進 postcss.config.js

// 創(chuàng)建 postcss.config.js
// 假如你使用的框架/工具不支持 postcss.config.js褐啡,則可以使用內聯(lián)的寫法
module.exports = {
  plugins: {
    tailwindcss: {},
    autoprefixer: {},
  }
}

3. 配置 tailwind.config.js

/** @type {import('tailwindcss').Config} */
module.exports = {
  // 這里給出了一份 uni-app /taro 通用示例,具體要根據(jù)你自己項目的目錄進行配置
  // 注意鳖昌,不在 content glob語法匹配的文件备畦,不會生成工具類
  content: ['./public/index.html', './src/**/*.{html,js,ts,jsx,tsx,vue}'],
  // ... other options
  corePlugins: {
    // 不需要 preflight,因為preflight主要是給 h5 的许昨,小程序使用的獨特的標簽懂盐,導致preflight不起作用。
    // 如果你要同時開發(fā)小程序和 h5 端糕档,你應該使用環(huán)境變量來控制它
    preflight: false
  }
}

4. 引入 tailwindcss

在你的項目入口引入 tailwindcss

比如 uni-appApp.vue

<style>
@tailwind base;
@tailwind utilities;
/* 使用 scss */
/* @import 'tailwindcss/base'; */
/* @import 'tailwindcss/utilities'; */
</style>

又或者 Taroapp.scss

@import 'tailwindcss/base';
@import 'tailwindcss/utilities';

然后在 app.ts 里引入

Q&A: 為什么沒有引入 tailwindcss/components? 是因為里面默認存放的是 pc 端自適應相關的樣式莉恼,對小程序環(huán)境來說沒有用處。如果你有 @layer components 相關的工具類需要使用速那,可以引入俐银。

二. 配置 remrpx

前面我們安裝配置好了 tailwindcss,接下來一步便是配置 remrpx

為什么要配置這一步呢端仰?

這是因為 tailwindcss 里面工具類的長度單位捶惜,默認都是 rem,比如:

.m-4{
  margin: 1rem;
}
.h-4{
  height: 1rem; 
}
/*......*/

這在 h5 環(huán)境下自適應良好荔烧。但小程序里面吱七,我們大部分情況都是使用 rpx 這個單位來進行自適應,所以就需要把默認的 rem 單位轉化成 rpx鹤竭。

配置tailwindcss單位轉化

兩種轉化方式(二者選其一即可)

  1. 假如你想要把項目里踊餐,所有的 rem 都轉化成 rpx,那么 postcss plugin: postcss-rem-to-responsive-pixel 適合你诺擅。

  2. 假如你想縮小一下范圍市袖,只把 tailwindcss 生成的工具類的單位,從 rem 轉變?yōu)?rpx,那么 tailwindcss preset: tailwindcss-rem2px-preset 適合你苍碟。

推薦第一種轉化方式酒觅,這會把項目里所有你編寫的,或者引入的第三方控件里的 rem 單位微峰,全部轉化為 rpx舷丹,當然這個包也提供了各種配置項,幫助你進行更加細致的操作蜓肆。

1. postcss-rem-to-responsive-pixel (推薦)

首先我們安裝它:

npm i -D postcss-rem-to-responsive-pixel

安裝好之后颜凯,把它注冊進你的 postcss.config.js 即可:

// postcss.config.js
module.exports = {
  plugins: {
    tailwindcss: {},
    autoprefixer: {},
    'postcss-rem-to-responsive-pixel': {
      // 轉化的單位,可以變成 px / rpx
      transformUnit: 'rpx',
      // 32 意味著 1rem = 32rpx
      rootValue: 32,
      // 默認所有屬性都轉化
      propList: ['*']
    },
  },
};
2. tailwindcss-rem2px-preset

同樣我們安裝它:

npm i -D tailwindcss-rem2px-preset

然后在 tailwind.config.js 中,注冊這個預設:

// tailwind.config.js

module.exports = {
  presets: [
    require('tailwindcss-rem2px-preset').createPreset({
      // 32 意味著 1rem = 32rpx
      fontSize: 32,
      // 轉化的單位,可以變成 px / rpx
      unit: 'rpx'
    })
  ],
  // ...
}

這樣即可完成 tailwindcss 默認工具類的 remrpx 的配置了仗扬。

三. 安裝本插件

# npm / yarn /pnpm
npm i -D weapp-tailwindcss-webpack-plugin
# 可以執(zhí)行一下 patch 方法
npx weapp-tw patch

然后把下列腳本症概,添加進你的 package.jsonscripts 字段里:

 "scripts": {
+  "postinstall": "weapp-tw patch"
 }

接下來我們就開始在不同的框架里注冊了,這里我們以目前市面上主流的 tarouni-app 為例:

taro (all frameworks)

在使用Taro時早芭,檢查一下把 config/index 的配置項 compiler 設置為 'webpack5'

// config/index 文件中
const { UnifiedWebpackPluginV5 } = require('weapp-tailwindcss-webpack-plugin')

{
  mini: {
    webpackChain(chain, webpack) {
      chain.merge({
        plugin: {
          install: {
            plugin: UnifiedWebpackPluginV5,
            args: [{
              appType: 'taro'
            }]
          }
        }
      })
    }
  }
}

uni-app (vue2/3)

在創(chuàng)建uni-app項目時彼城,請選擇uni-app alpha版本

這是因為目前默認創(chuàng)建的版本還是使用的 @vue/cli 4.x 的版本,它使用 webpack4postcss7退个,而 alpha 版本使用 @vue/cli 5.xwebpack5postcss8募壕,這可以使用最新版本的 tailwindcss

vue create -p dcloudio/uni-preset-vue#alpha my-alpha-project

更多 uni-app 模板詳見 quickstart-cli

// 在 vue.config.js 里注冊
const { UnifiedWebpackPluginV5 } = require('weapp-tailwindcss-webpack-plugin')
/**
 * @type {import('@vue/cli-service').ProjectOptions}
 */
const config = {
  // some option...
  configureWebpack: (config) => {
    config.plugins.push(
      new UnifiedWebpackPluginV5({
        appType: 'uni-app'
      })
    )
  }
  // other option...
}

module.exports = config

uni-app vite(vue3)

uni-app vue3/Vite版是目前 uni-app 的最新版本语盈,使用 vite 進行打包和開發(fā)舱馅,同樣我們可以按照以下方式進行注冊:

// vite.config.[jt]s
import { UnifiedViteWeappTailwindcssPlugin as uvwt } from 'weapp-tailwindcss-webpack-plugin/vite'
// uvwt() 要放在 uni 官方插件之后
const vitePlugins = [uni(),uvwt()]

export default defineConfig({
  plugins: vitePlugins,
  // 假如 postcss.config.js 不起作用,請使用內聯(lián) postcss Latset
  // css: {
  //   postcss: {
  //     plugins: postcssPlugins,
  //   },
  // },
});

更多的框架!

支持更多的框架類型刀荒,可以查看 文檔地址代嗤。

開始開發(fā)!

通過這三步照棋,我們就完成了在小程序里使用 tailwindcss 的步驟了资溃!

你可以立即啟動項目武翎,在你的模板文件烈炭,或者 js 文件里任意使用工具類, 它會實時的生成相應的 css class 并應用到 dom 上。

如果你在使用過程中遇到了問題宝恶,你可以前往 https://weapp-tw.icebreaker.top/ 進行檢索符隙,或者加入微信技術交流群,一起探討前端技術垫毙!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末霹疫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子综芥,更是在濱河造成了極大的恐慌丽蝎,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異屠阻,居然都是意外死亡红省,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門国觉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吧恃,“玉大人,你說我怎么就攤上這事麻诀『墼ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵蝇闭,是天一觀的道長呻率。 經常有香客問我,道長呻引,這世上最難降的妖魔是什么筷凤? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮苞七,結果婚禮上藐守,老公的妹妹穿的比我還像新娘。我一直安慰自己蹂风,他們只是感情好卢厂,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惠啄,像睡著了一般慎恒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撵渡,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天融柬,我揣著相機與錄音,去河邊找鬼趋距。 笑死粒氧,一個胖子當著我的面吹牛,可吹牛的內容都是我干的节腐。 我是一名探鬼主播外盯,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼翼雀!你這毒婦竟也來了饱苟?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤狼渊,失蹤者是張志新(化名)和其女友劉穎箱熬,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡城须,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年护锤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酿傍。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡烙懦,死狀恐怖,靈堂內的尸體忽然破棺而出赤炒,到底是詐尸還是另有隱情氯析,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布莺褒,位于F島的核電站掩缓,受9級特大地震影響,放射性物質發(fā)生泄漏遵岩。R本人自食惡果不足惜你辣,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尘执。 院中可真熱鬧舍哄,春花似錦、人聲如沸誊锭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丧靡。三九已至蟆沫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間温治,已是汗流浹背饭庞。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留熬荆,地道東北人舟山。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像惶看,于是被迫代替她去往敵國和親捏顺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內容