在Vue3 + Vite 项目中使用 Tailwind CSS 4.0

首先是我的package.json

{
  "name": "aplumweb",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite --open",
    "build": "vite build",
    "preview": "vite preview"
  },
  "dependencies": {
    "@tailwindcss/vite": "^4.0.3",
    "tailwindcss": "^4.0.3",
    "vue": "^3.5.13"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^5.2.1",
    "sass-embedded": "^1.83.4",
    "vite": "^6.0.5"
  }
}

根据官网步骤

  • npm安装
    官网 https://tailwindcss.com/docs/installation/using-vite
    npm install tailwindcss @tailwindcss/vite

  • 配置插件 vite.config.js

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import tailwindcss from '@tailwindcss/vite'

// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    tailwindcss()
  ],
})
  • 新建 src\styles\index.css
@import "tailwindcss";
  • 在main.js中引入这个css
import { createApp } from 'vue'
import './styles/index.css'
import App from './App.vue'

createApp(App).mount('#app')

Tailwind CSS之前 导入基础组件 的三行代码被废弃,用 @import "tailwindcss"; 取代

在这里插入图片描述

VS Code安装插件

Tailwind CSS IntelliSense
在这里插入图片描述

验证是否引入成功

在App.vue中使用 <div class="bg-red-900">test</div> 验证
在这里插入图片描述

  • 在网页中呈现出颜色,表示引入成功
    在这里插入图片描述

参考资料

  1. 官网

https://tailwindcss.com/docs/upgrade-guide

  1. npx tailwindcss init 失效原因(因为tailwindcss 4.0版本不支持这种形式)

https://github.com/tailwindlabs/tailwindcss/discussions/15786

报错 
npx tailwindcss init -p npm ERR! could not determine executable to run  npm ERR! A complete log of this run can be found in:
  • 也注意 @tailwind 指令被废除。
  1. 参考视频

https://www.youtube.com/watch?v=P5d_UUxqOzs

在 UniApp + Vue3 + Vite + TypeScript + Tailwind CSS 的技术栈下,如果你想让 `onMounted` 中的方法**尽可能最后执行**,可以利用 JavaScript 提供的一些机制来调整执行顺序。通常情况下,`onMounted` 钩子会在组件挂载完成后立刻执行其内部的代码。如果你希望其中的部分逻辑推迟到其他所有初始化工作完成后再运行,可以通过以下几种方式实现: --- ### 方案一:使用 `setTimeout` 将任务放入宏任务队列 通过将需要延迟执行的任务放到下一个事件循环周期中,可以让它比当前微任务队列中的内容更晚执行。 ```typescript import { onMounted } from "vue"; export default { setup() { onMounted(() => { console.log("Component Mounted"); setTimeout(() => { console.log("This will run later in the macro task queue."); // 这里的逻辑会被推迟到最后执行 }, 0); }); return {}; }, }; ``` 这种方式非常简单有效,适合大多数场景下的需求。 --- ### 方案二:创建一个标志位并结合 watchEffect 或 ref 触发 如果想要更精确控制某个条件满足后再去触发某段逻辑,则可通过设置响应式的变量并在合适的时机改变它的值,从而间接达到目的。 ```typescript import { reactive, toRefs, onMounted } from &#39;vue&#39;; const state = reactive({ isReady: false, }); onMounted(() => { // 模拟一些前置准备工作... console.log(&#39;Initial tasks completed.&#39;); const delayedExecution = () => { if (state.isReady) { console.log(&#39;Delayed execution triggered when all initial works finished&#39;); } else { requestAnimationFrame(delayedExecution); // 继续监听直到准备好 } }; window.requestIdleCallback?.(delayedExecution) || requestAnimationFrame(delayedExecution); // 假设我们模拟过了一段时间后状态变为已准备完毕。 setTimeout(() => { state.isReady = true; }, 500); }); // 导出状态给模板使用 return { ...toRefs(state)}; ``` 这里采用了较为复杂的方式来做展示,并非一定必要这么麻烦。不过如果是涉及到较大型应用架构设计的话确实值得借鉴一下思路哦~ --- ### 方案三:手动管理 promise chain 来串行化流程 对于那些有明确前后依赖关系的操作来说,构造好它们之间的链条也是不错的选择之一。 ```typescript let initPromise: Promise<void>; function performInitSteps(): Promise<void> { return new Promise((resolve) => { /* Step 1 */ console.log(&#39;First initialization step...&#39;); // Mock async op for example sake only. setTimeout(() => { resolve(); /* Next steps could go here too! Just keep chaining promises accordingly.*/ }, 250); }).then(() => { // More intermediate actions after first one completes console.log(&#39;Second sequential action performed.&#39;); return new Promise(resolvex => setTimeout(resolvex, 75)); // Another artificial delay simulating real world proc }); } initPromise = performInitSteps(); onMounted(async () => { await initPromise; try{ let resultOfFinalOpAwaitedWithinOnMount = await anotherAsyncCall(); console.log(resultOfFinalOpAwaitedWithinOnMount); }catch(err){ console.error(`Error occurred during final phase of mounting process`, err) } }); ``` 这种方法特别适用于存在明显分阶段处理的需求情况之下,每一步都需要确保前驱已完成才可以安全进入下一步骤操作的时候。 --- 以上就是在 **UniApp + Vue3 + Vite + TypeScript + Tailwind CSS** 环境下如何让你的 `onMounted` 内部方法尽量做到“最后执行”的解决方案啦!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值