前情

Tailwind CSS 是一个原子类 CSS 框架,它将基础的 CSS 全部拆分为原子级别,同时还补全各种浏览器模式前缀,兼容性也不错。它的工作原理是扫描所有 HTML 文件、JavaScript 组件以及任何模板中的 CSS 类名,然后生成相应的样式代码并写入到一个静态 CSS 文件中。Tailwind CSS 快速、灵活、可靠,没有运行时负担。自从接触了Tailwind CSS后,目前已经是我项目的标配了。正好最近接手了一个uni-app多端的小程序项目,我也想让它配置上Tailwind CSS。

引入步骤

STEP 1:安装相关依赖

uni-app已经内置了postcss和autoprefixer,所以在此处就不需要安装了

npm install -D tailwindcss

STEP 2:补充配置

# 初始化 tailwind.config.js 文件
npx tailwindcss init

执行上面命令生成tailwind.config.js,并增加如下配置,对于已有项目引入tailwindcss最好是增加前辍判断,避免样式名冲突

const path = require("path");

const resolve = (p) => {
return path.resolve(__dirname, p);
};
/** @type {import('tailwindcss').Config} */
module.exports = {
// 增加前辍避免样式冲突
prefix: 'zhs-',
// 注意此处,一定要 `path.resolve` 一下, 传入绝对路径
// 你要有其他目录,比如 components,也必须在这里,添加一下
content: [
"./index.html",
"./pages/**/*.{html,js,ts,jsx,tsx,vue}",
"./components/**/*.{html,js,ts,jsx,tsx,vue}"
].map(resolve),
corePlugins: {
// 跨多端可以 h5 开启,小程序关闭
preflight: false,
},
};

在项目根目录下vite.config.js文件中,增加如下配置,具体查看start end包裹的注释

import path from "path";
import fs from "fs-extra";
import { defineConfig } from "vite";
import uni from "@dcloudio/vite-plugin-uni"; // start 引入tailwindcss增加的配置0
import { UnifiedViteWeappTailwindcssPlugin as uvwt } from "weapp-tailwindcss/vite";
// 注意: 打包成 h5 和 app 都不需要开启插件配置
const isH5 = process.env.UNI_PLATFORM === "h5";
const isApp = process.env.UNI_PLATFORM === "app";
const WeappTailwindcssDisabled = isH5 || isApp; const resolve = (p) => {
return path.resolve(__dirname, p);
};
// end 引入tailwindcss增加的配置0 const platformMap = {
app: "App",
web: "Web",
"mp-weixin": "微信小程序",
"mp-alipay": "支付宝小程序",
"mp-baidu": "百度小程序",
"mp-toutiao": "抖音小程序",
"mp-lark": "飞书小程序",
"mp-qq": "QQ小程序",
"mp-kuaishou": "快手小程序",
"mp-jd": "京东小程序",
"mp-360": "360小程序",
}; export default defineConfig({
plugins: [
uni(), // start 引入tailwindcss增加的配置plugins
uvwt({
rem2rpx: true,
disabled: WeappTailwindcssDisabled,
// 由于 hbuilderx 会改变 process.cwd 所以这里必须传入当前目录的绝对路径
tailwindcssBasedir: __dirname
})
// end 引入tailwindcss增加的配置plugins ], // start 引入tailwindcss增加的配置postcss
css: {
postcss: {
plugins: [
require("tailwindcss")({
// 注意此处,手动传入你 `tailwind.config.js` 的绝对路径
config: resolve("./tailwind.config.js")
}),
require("autoprefixer")
],
},
}
// end 引入tailwindcss增加的配置postcss
});

STEP 3:在项目根组件App.vue中引入tailwindcss

// 在项目下的App.vue增加如下css代码
<style lang="scss">
@import 'tailwindcss/base';
@import 'tailwindcss/utilities';
@import 'tailwindcss/components';
</style>

如果你项目不想用scss可以按如下方式引入

<style>
@tailwind base;
@tailwind components;
@tailwind utilities;
</style>

STEP 4:安装weapp-tailwindcss

npm i -D weapp-tailwindcss

STEP 5:然后把下列脚本,添加进你的 package.json 的 scripts 字段里

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

执行 weapp-tw patch 主要是做2件事情

  1. 给当前你本地的 tailwindcss 打上支持 rpx 的补丁 (小程序特有单位,非 web 标准)
  2. 用来暴露 tailwindcss 运行上下文给 webpack/vite/glup 插件。

而添加上面一段 npm scripts 的用途是,利用 npm hook, 每次安装包后,都会自动执行一遍 weapp-tw patch 这个脚本。

这样即使 tailwindcss 更新了版本导致了补丁失效,也会在重新下载后,第一时间被打上。

至此就可以愉快的在uni-app项目中使用Tailwind CSS高效实现UI还原了

友情提示

uni-app项目一般使用的IDE是官方自带的HBuilder x,为了更好的开发体验安装如下插件,即可实现样式名提示了,插件地址:Tailwind CSS语言服务 - DCloud 插件市场

安装插件开发者工具会有莫名的报错,可以忽略,从最近一二周的使用体验上来说是没有什么问题的。

小遗撼

目前还没有找到在uni-app Vue 2项目中引入的方法,在Vue 2下因为HBuilder X内置的postcss版本过低,会导致任务进入一个死循环,weapp-tailwindcss文挡有说明一种hack解法。

我曾经也想在我的uni-app Vue 2项目中引入Tailwind CSS,最终都以失败告终,虽然weapp-tailwindcss文挡有提供hack解法,但考虑到修改到了HBuilder x的内部文件,我就没有去折腾,还是老老实实使用普通的方式书写CSS,如果有哪位成功实现并使用体验良好的可以留言分享,谢谢了。

uni-app Vue3项目引入Tailwind CSS的更多相关文章

  1. vue项目引入自定义.css的样式文件

    ES6的引入方式: .vue文件中 css文件引入 <template></template> <style scoped> @import "../as ...

  2. Vue-Cli 3.x 创建的项目中对 import 引入的 CSS 样式启用 autoprefixer

    问题描述: Vue-Cli 3.x 默认开启了 autoprefixer,但对于在 main.js 中通过 import 引入的 CSS 并没有自动添加前缀 分析原因: autoprefixer 在项 ...

  3. vue项目中引入animate.css和wow.js

    本文转自:https://blog.csdn.net/liyunkun888/article/details/85003152 https://www.zhuimengzhu.com/content/ ...

  4. uni app中使用自定义图标库

    项目中难免会用到自定义图标,那在uni app中应该怎么使用呢? 首先, 将图标目录放在static资源目录下: 在main.js中引入就可以全局使用了 import '@/static/icon-o ...

  5. Vue(1):用Vue-cli构建Vue3项目

    使用Vue-cli构建Vue3项目 1.检查node版本 node -v 以上node版本位14.15.0满足Vue3项目的创建条件(Vu3需要node 版本8以上) 为什么需要安装node? vue ...

  6. 从零搭建基于webpack的Electron-Vue3项目(1)——基于webpack的Vue3项目搭建

    从零搭建基于webpack的Electron-Vue3项目(1)--基于webpack的Vue3项目搭建 前言 本篇文章内容,主要是基于webpack的Vue3项目开发环境进行搭建,暂时还不涉及到El ...

  7. Vue3项目搭建规范

    Vue3项目搭建规范 一. 代码规范 1.1 集成editorconfig配置 EditorConfig有助于为不同IDE编辑器上维护一致的编码风格 安装插件:EditorConfig for VS ...

  8. Vue3项目的简单搭建与项目结构的简单介绍

    Vue3项目的创建与运行 本文记录下自己近期学习的Vue3项目的创建,以及如何去运行一个Vue应用,同时包括对Vue项目结构进行一个简单的介绍. 一.node与npm的安装 通常平常进行开发的同学应该 ...

  9. 教程 - 深度探讨在 Vue3 中引入 CesiumJS 的最佳方式

    目录 1. 你应该先知道的基础知识 1.1. CesiumJS 的库构成 1.2. 选择 Vite3 和 pnpm 的理由 1.3. 使用 External 模式引入静态库 - 不打包静态库 1.4. ...

  10. vue项目引入element

    前提工作-安装并配置好以下环境: 1.安装node  2.安装git 1.初始化项目 vue init webpack vue-elementui npm run dev 2.安装element np ...

随机推荐

  1. Google Aviator Evaluator 使用入门(一)

    Aviator Evaluator 使用入门(一) https://www.yuque.com/boyan-avfmj/aviatorscript/tvahat 一.什么是规则引擎 定义:规则引擎是一 ...

  2. Windows右下角时间显示到秒(改注册表)

    ​ 事件起因: 由于京东秒杀,要准点抢购,于是想着能不能把Windows右下角的时间显示到秒,于是在网上查了一下,修改注册表即可 解决办法: 新建一个 ShowSecondsInSystemClock ...

  3. k8s-部署

    目录 1 k8s 组件功能介绍 1.2 K8s 集群API: kube-apiserver 1.3 K8s 调度程序:kube-scheduler 1.4 K8s 控制器:kube-controlle ...

  4. LeetCode 1397. Find All Good Strings 找到所有好字符串 (数位DP+KMP)

    好题- 就是比平时的 hard 难了一些-- 虽然猜出是数位DP了-不过比我之前做的题,好像多了一维,印象中都是一维记录之前状态就够了--然后就没做出-- 至于 KMP 的应用更是神奇,虽然掌握的 k ...

  5. Vue3 和 Vue2 的区别 ?

    1. Vue3 和 VUe2 性能提升 :使用 proxy 代替 defainProperty 实现响应式数据 :使用 ts 书写代码 : 新特性有:组合 api compositionApi  :新 ...

  6. 一个查询IP地理信息和CDN提供商的离线终端工具

    一个查询IP地理信息和CDN提供商的离线终端工具 Nali 功能 支持多种数据库 纯真 IPv4 离线数据库 ZX IPv6 离线数据库 Geoip2 城市数据库 (可选) IPIP 数据库 (可选) ...

  7. 云原生爱好者周刊:目前 WebAssembly 的最佳应用场景有哪些?

    云原生一周动态要闻: Istio 1.11 发布 Facebook.Google.Isovalent.微软和 Netflix 宣布成立 eBPF 基金会 GitHub 工程团队将开发环境迁移到 Cod ...

  8. 祝贺开源之夏 2023 KubeSphere 社区项目中选学生!

    日前,开源之夏 2023 所有中选结果已出炉,在此祝贺各位中选的同学! 活动简介 开源之夏是由中科院软件所"开源软件供应链点亮计划"发起并长期支持的一项暑期开源活动,旨在鼓励在校学 ...

  9. 基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS

    容器作为近些年最火热的后端技术,加快了很多企业的数字化转型进程.目前的企业,不是在使用云原生技术,就是在转向云原生技术的过程中.在容器化进程中,如何保持业务的平稳迁移,如何将现有的一些服务设施一并进行 ...

  10. 链表反转(反转全部,前n个,中间)

    链表反转 反转全部 // 迭代 struct ListNode *reverseList(struct ListNode *head) { struct ListNode *pre = NULL; s ...