Coder Social home page Coder Social logo

dcasia / mini-program-tailwind Goto Github PK

View Code? Open in Web Editor NEW
470.0 12.0 38.0 2.17 MB

让你的小程序用上原汁原味的 Tailwind/Windi CSS

Home Page: https://www.craft.do/s/Wx2f9cjGwyZYOx

JavaScript 2.06% TypeScript 97.94%
mini-program tailwindcss windicss wechat webpack weapp css tailwind postcss taro

mini-program-tailwind's Introduction

wechat-mp-plugin

Mini Program Tailwind Webpack Plugin

让你的小程序用上原汁原味的 Tailwind/Windi CSS

来自 Digital Creative, 一家位于上海的数字产品调研、设计与开发公司。

了解我们

推荐阅读 独立文档 以获得更好的阅读体验 ♥️


介绍

由于小程序本身不支持由 Tailwind/Windi CSS 产生的选择器名称中包含的一些特殊转义字符(如 \[ \! \. 等),这使得你在开发小程序时无法使用一些本该在开发 Web 应用时使用的得心应手的灵活语法与 Arbitrary values/Value auto-infer 功能,如 w-[30px] translate-x-1/2 !bg-[#ff0000] 等。这无疑对我们的开发效率与心智负担带来了不小的影响。

为了突破这一限制,我们开发了这一款插件来帮助你在使用 Tailwind/Windi CSS 开发小程序时仍然保持着与开发 Web 应用高度一致的开发体验,你不再需要关注因为哪些字符串不被支持而不得不换一种写法的问题,而是继续按照 Tailwind/Windi CSS 的官方语法继续编写你的小程序样式,背后的兼容工作则由这款插件静默处理。

此外,本插件还集成了 rpx 值自动转换的功能。该功能可以将 Tailwind/Windi CSS 配置文件中以及源码中我们书写的 rempx 单位的值在最终生成的样式文件中自动转换为 rpx 单位的值。这既可以让开发者复用在 Web 项目中使用的同一份主题配置又可以让小程序继续使用 responsive pixel 带来的特性。

进一步了解本插件的工作原理

让你的小程序用上原汁原味的 Tailwind/Windi CSS


快速开始

选择其中一个适合你的小程序类型进行插件安装

⚙️ 常规 Webpack 类小程序(以 MPX 为例)

常规 Webpack 类小程序(以 MPX 为例)

MPX, 一款具有优秀开发体验和深度性能优化的增强型跨端小程序框架。

由于 MPX 框架为典型的以 Webpack 为构建工具的增强型小程序开发框架,所以本次安装示范将 MPX 项目作为典型案例来演示如何为大部分 Webpack 类小程序项目进行插件安装。以下安装步骤在 Webpack 项目中具有广泛的通用性,对于大部分 Webpack 类小程序项目只需参考相同步骤进行安装即可。

安装 windicss-webpack-plugin

npm i windicss-webpack-plugin -D
参考 Windi CSS 官方文档了解更多细节

Windi CSS Webpack 集成

安装 @dcasia/mini-program-tailwind-webpack-plugin

npm i @dcasia/mini-program-tailwind-webpack-plugin -D

更新 webpack 配置文件

使用 Webpack 插件

//webpack.base.conf.js
const WindiCSSWebpackPlugin = require("windicss-webpack-plugin");
const MiniProgramTailwindWebpackPlugin = require("@dcasia/mini-program-tailwind-webpack-plugin")

module.exports = {
  plugins: [
    new WindiCSSWebpackPlugin(),
    new MiniProgramTailwindWebpackPlugin({
      // options
    })
  ]
}

新建 Windi CSS 配置文件

在项目根目录新建 windi.config.js 配置文件

//windi.config.js
export default {
  preflight: false,
  prefixer: false,
  extract: {
    // 将 .mpx 文件纳入范围(其余 Webpack 类小程序根据项目本身的文件后缀酌情设置)
    include: ['src/**/*.{css,html,mpx}'],
    // 忽略部分文件夹
    exclude: ['node_modules', '.git', 'dist']
  },
  corePlugins: {
    // 禁用掉在小程序环境中不可能用到的 plugins
    container: false
  }
}

此处 Tailwind CSS 配置文件同样适用

参考 Windi CSS 官方文档了解更多细节

Windi CSS 配置文件兼容规则

在入口文件中引入 Windi CSS 的产物

// app.mpx
<style src="windi.css"></style>

对于其余非 MPX 项目的 Webpack 类小程序,可参考类似的方式在入口文件中引入 windi.css 即可,如:

// main.js
import 'windi.css'
参考 Windi CSS 官方文档了解更多细节

引入 Windi CSS 样式文件

完成

开始享受在小程序项目中由 Windi CSS 带来的高效开发体验 🎉

可配置参数

名称 类型 默认 描述
enableRpx Boolean true 是否开启自动转换至 rpx 单位值的功能
designWidth Number 350 设计稿的像素宽度值,该尺寸会影响 rpx 转换过程中的计算比率
utilitiesSettings.spaceBetweenItems Array<string> [] 使用了 Space Between utilities 的容器中的子组件的名称。默认已包含 view, button, text, image 四个常用组件,所以大部分情况下开发者不需要配置该项。如需新增则可以在数组中添加新的组件名称。
utilitiesSettings.divideItems Array<string> [] 使用了 Divide width utilities 的容器中的子组件的名称。默认已包含 view, button, text, image 四个常用组件,所以大部分情况下开发者不需要配置该项。如需新增则可以在数组中添加新的组件名称。

案例

集成案例:MPX 项目

👽 Taro 小程序

Taro 小程序

Taro, 多端统一开发解决方案

本插件包含 Taro 插件,通过“一键安装”的方式来便捷的适配 Taro 小程序。

Taro 插件已兼容以下前端框架

  • React
  • Vue 2
  • Vue 3
  • Preact

同时也兼容在混合原生组件开发中使用 Tailwind/Windi CSS

安装 @dcasia/mini-program-tailwind-webpack-plugin

npm i @dcasia/mini-program-tailwind-webpack-plugin -D

使用 Taro 插件

// config/index.js
const config = {
  plugins: [
    ['@dcasia/mini-program-tailwind-webpack-plugin/dist/taro', {
      // ...options
    }]
  ]
}

新建 Windi CSS 配置文件

在项目根目录新建 windi.config.js 配置文件

// windi.config.js
export default {
  prefixer: false,
  extract: {
    // 忽略部分文件夹
    exclude: ['node_modules', '.git', 'dist']
  },
  corePlugins: {
    // 禁用掉在小程序环境中不可能用到的 plugins
    container: false
  }
}

此处 Tailwind CSS 配置文件同样适用

参考 Windi CSS 官方文档了解更多细节

Windi CSS 配置文件兼容规则

在入口文件中引入 Windi CSS 的产物

// app.js
import 'windi.css';

完成

开始享受在 Taro 中由 Windi CSS 带来的高效开发体验 🎉

可配置参数

名称 类型 默认 描述
enableWindiCSS Boolean true 是否开启插件自带的 Windi CSS
windiCSSConfigFile String 读取项目根目录的配置文件 必要时手动设置 Windi CSS 配置文件的路径
enableRpx Boolean false 是否开启自动转换至 rpx 单位值的功能(由于 Taro 自带该功能,默认关闭)
designWidth Number 375 设计稿的像素宽度值,该尺寸会影响 rpx 转换过程中的计算比率
utilitiesSettings.spaceBetweenItems Array<string> [] 使用了 Space Between utilities 的容器中的子组件的名称。默认已包含 view, button, text, image 四个常用组件,所以大部分情况下开发者不需要配置该项。如需新增则可以在数组中添加新的组件名称。
utilitiesSettings.divideItems Array<string> [] 使用了 Divide width utilities 的容器中的子组件的名称。默认已包含 view, button, text, image 四个常用组件,所以大部分情况下开发者不需要配置该项。如需新增则可以在数组中添加新的组件名称。
utilitiesSettings.customComponents Array<string> [] 对于使用 Uno CSS 作为 Atomic CSS 引擎的开发者需要根据项目情况配置。默认已包含所有小程序自带的组件名称,所以大部分情况下开发者不需要配置该项。如需新增则可以在数组中添加新的组件名称。
enableDebugLog Boolean false 是否开启打印本插件的内部运行日志

案例

🔗 uni-app 小程序

uni-app 小程序

uni-app, 开发一次,多端覆盖。

本篇内容包含 uni-app 的 Vue 3 与 Vue 2 两种安装示范。

Vue 3 安装示范

请参考下一个小程序类型:常规 Vite 类小程序(以 uni-app 为例)

Vue 2 安装示范

安装 windicss-webpack-plugin

npm i windicss-webpack-plugin -D
参考 Windi CSS 官方文档了解更多细节

Windi CSS Webpack 集成

安装 @dcasia/mini-program-tailwind-webpack-plugin

npm i @dcasia/mini-program-tailwind-webpack-plugin -D

新建 Vue 配置文件

在项目根目录新建 vue.config.js 配置文件并使用 Webpack 插件

// vue.config.js
const WindiCSSWebpackPlugin = require("windicss-webpack-plugin");
const MiniProgramTailwindWebpackPlugin = require("@dcasia/mini-program-tailwind-webpack-plugin")

module.exports = {  
  configureWebpack: {  
    plugins: [  
      new WindiCSSWebpackPlugin(),
      new MiniProgramTailwindWebpackPlugin({
        // options
      })
    ]  
  }  
}

新建 Windi CSS 配置文件

在项目根目录新建 windi.config.js 配置文件

//windi.config.js
export default {
  preflight: false,
  prefixer: false,
  extract: {
    // 忽略部分文件夹
    exclude: ['node_modules', '.git', 'dist']
  },
  corePlugins: {
    // 禁用掉在小程序环境中不可能用到的 plugins
    container: false
  }
}

此处 Tailwind CSS 配置文件同样适用

参考 Windi CSS 官方文档了解更多细节

Windi CSS 配置文件兼容规则

在入口文件中引入 Windi CSS 的产物

// main.js
import 'windi.css'

完成

开始享受在小程序项目中由 Windi CSS 带来的高效开发体验 🎉

可配置参数

名称 类型 默认 描述
enableRpx Boolean true 是否开启自动转换至 rpx 单位值的功能
designWidth Number 350 设计稿的像素宽度值,该尺寸会影响 rpx 转换过程中的计算比率
utilitiesSettings.spaceBetweenItems Array<string> [] 使用了 Space Between utilities 的容器中的子组件的名称。默认已包含 view, button, text, image 四个常用组件,所以大部分情况下开发者不需要配置该项。如需新增则可以在数组中添加新的组件名称。
utilitiesSettings.divideItems Array<string> [] 使用了 Divide width utilities 的容器中的子组件的名称。默认已包含 view, button, text, image 四个常用组件,所以大部分情况下开发者不需要配置该项。如需新增则可以在数组中添加新的组件名称。
utilitiesSettings.customComponents Array<string> [] 对于使用 Uno CSS 作为 Atomic CSS 引擎的开发者需要根据项目情况配置。默认已包含所有小程序自带的组件名称,所以大部分情况下开发者不需要配置该项。如需新增则可以在数组中添加新的组件名称。

案例

集成案例:uni-app Vue 2 项目

🔩 常规 Vite 类小程序(以 uni-app 为例)

常规 Vite 类小程序(以 uni-app 为例)

uni-app, 开发一次,多端覆盖。

由于在 uni-app 中使用 Vue 3 进行小程序开发时项目是基于 Vite 进行构建的,所以本次安装示范将 uni-app Vue 3 项目作为典型案例来演示如何为大部分 Vite 类小程序项目进行插件安装。以下安装步骤在 Vite 项目中具有广泛的通用性,对于大部分 Vite 类小程序项目只需参考相同步骤进行安装即可。

安装 vite-plugin-windicss 与 windicss

npm i vite-plugin-windicss windicss -D
参考 Windi CSS 官方文档了解更多细节

Windi CSS Vite 集成

安装 @dcasia/mini-program-tailwind-webpack-plugin

npm i @dcasia/mini-program-tailwind-webpack-plugin -D

更新 Vite 配置文件

vite.config.js 配置文件中使用插件

// vite.config.js
import WindiCSS from 'vite-plugin-windicss';
import MiniProgramTailwind from '@dcasia/mini-program-tailwind-webpack-plugin/rollup';

export default {
  plugins: [
    WindiCSS(),
    MiniProgramTailwind()
  ]
}

新建 Windi CSS 配置文件

在项目根目录新建 windi.config.js 配置文件

//windi.config.js
export default {
  preflight: false,
  prefixer: false,
  extract: {
    // 忽略部分文件夹
    exclude: ['node_modules', '.git', 'dist']
  },
  corePlugins: {
    // 禁用掉在小程序环境中不可能用到的 plugins
    container: false
  }
}

此处 Tailwind CSS 配置文件同样适用

参考 Windi CSS 官方文档了解更多细节

Windi CSS 配置文件兼容规则

在入口文件中引入 Windi CSS 的产物

// main.js
import 'virtual:windi.css'

完成

开始享受在小程序项目中由 Windi CSS 带来的高效开发体验 🎉

可配置参数

名称 类型 默认 描述
enableRpx Boolean true 是否开启自动转换至 rpx 单位值的功能
designWidth Number 350 设计稿的像素宽度值,该尺寸会影响 rpx 转换过程中的计算比率
utilitiesSettings.spaceBetweenItems Array<string> [] 使用了 Space Between utilities 的容器中的子组件的名称。默认已包含 view, button, text, image 四个常用组件,所以大部分情况下开发者不需要配置该项。如需新增则可以在数组中添加新的组件名称。
utilitiesSettings.divideItems Array<string> [] 使用了 Divide width utilities 的容器中的子组件的名称。默认已包含 view, button, text, image 四个常用组件,所以大部分情况下开发者不需要配置该项。如需新增则可以在数组中添加新的组件名称。
utilitiesSettings.customComponents Array<string> [] 对于使用 Uno CSS 作为 Atomic CSS 引擎的开发者需要根据项目情况配置。默认已包含所有小程序自带的组件名称,所以大部分情况下开发者不需要配置该项。如需新增则可以在数组中添加新的组件名称。

案例

集成案例:uni-app Vue 3 项目

🛠 原生开发或自定义构建的小程序

原生开发或自定义构建工具的小程序

无论你的项目基于什么 bundler 或 workflow 工具进行开发,只要有一个可编程的文件监听与处理服务便可以进行自定义实现。但这里需要明确的一点是,若想在以原生开发模式的基础之上去集成本插件的功能,则一定需要我们去启动一套可编程的文件监听处理服务作为插件的运行基础,这个服务通常由配置好的 Webpack, Gulp 等第三方工具完成。

使用 Tailwind/Windi CSS CLI 的开发者请看

如果你是通过 Tailwind/Windi CSS 官方的 CLI 进行小程序 UI 开发,遗憾的是由于该 CLI 不支持插件机制而且不可能支持对于模板文件的修改,所以我们无法在此基础之上以自定义的方式集成本插件。

我们将本插件的核心功能解耦并打包进了 universal-handler.js 文件中,若你想在自定义的构建工具中集成本插件的核心功能,可以在工作流逻辑中引入 universal-handler

const { handleTemplate, handleStyle } = require('@dcasia/mini-program-tailwind-webpack-plugin/universal-handler')

处理 template:

const rawContent = '<view class="w-10 h-[0.5px] text-[#ffffff]"></view>'
const handledTemplate = handleTemplate(rawContent)

处理 style:

const rawContent = '.h-\\[0\\.5px\\] {height: 0.5px;}'
const handledStyle = handleStyle(rawContent, options)

此后你便可以将处理过的字符串返回至工作流原本的流程中来生成最终的文件。

进一步了解自定义实现过程中的实践细节

小程序集成 Windi CSS 的自定义实现

可配置参数

名称 类型 默认 描述
enableRpx Boolean false 是否开启自动转换至 rpx 单位值的功能
designWidth Number 350 设计稿的像素宽度值,该尺寸会影响 rpx 转换过程中的计算比率
utilitiesSettings.spaceBetweenItems Array<string> [] 使用了 Space Between utilities 的容器中的子组件的名称。默认已包含 view, button, text, image 四个常用组件,所以大部分情况下开发者不需要配置该项。如需新增则可以在数组中添加新的组件名称。
utilitiesSettings.divideItems Array<string> [] 使用了 Divide width utilities 的容器中的子组件的名称。默认已包含 view, button, text, image 四个常用组件,所以大部分情况下开发者不需要配置该项。如需新增则可以在数组中添加新的组件名称。
utilitiesSettings.customComponents Array<string> [] 对于使用 Uno CSS 作为 Atomic CSS 引擎的开发者需要根据项目情况配置。默认已包含所有小程序自带的组件名称,所以大部分情况下开发者不需要配置该项。如需新增则可以在数组中添加新的组件名称。

案例

集成案例:基于 Gulp 进行自定义实现

示范操作步骤均以集成 Windi CSS 为例(Windi CSS 的体验更佳且兼容 Tailwind CSS)

进一步了解 Windi CSS

Windi CSS


陷阱

  • 在小程序中为了使组件样式可以被 Tailwind/Windi 的 CSS 产物作用到,我们需要在每一个组件的 JSON 配置文件中设置其样式的作用域 styleIsolation,否则即使 Tailwind/Windi CSS 工作正常也无法用来开发组件 UI。

    Taro 小程序不受该限制影响

    {
      "component": true,
      "styleIsolation": "apply-shared"
    }
    相关 issue

    Issue #1

  • 由于目前微信开发者工具的热重载功能无法监听到样式文件内由 @import 导入的 wxss 文件内容的变动,所以当启用热重载功能开发时,模拟器不会随着你对 Tailwind/Windi CSS 的更改而更新 UI。目前微信官方已知晓该 bug 的存在,在该 bug 修复之前,我们建议你在开发时关闭热重载,用传统的页面自动刷新来预览每一次的 UI 更新。 目前,该问题已在微信开发者工具 1.06.2205231 RC 中被修复。

    相关 issue

    Issue #3

  • 对于原生小程序中外部样式类 externalClasses 的声明,插件仅支持将该 externalClasses 名称声明为 'class' 的做法,不支持其他名称。

    Component({
      externalClasses: [ 'class' ]
    })
    相关 issue

    Issue #44


功能对比

语法 不使用本插件 使用本插件
Regular: h-10 text-white
Arbitrary values/Value infer: t-[25px] bg-[#ffffff]
Fraction: translate-x-1/2 w-8.5
Important: !p-1
RGB value infer: text-[rgb(25,25,25)]
Space between: space-y-2 space-y-reverse
Divide width: divide-x-2 divide-y-reverse
Variants: dark:bg-gray-800
Variants groups: hover:(bg-gray-400 font-medium)
Responsive: md:p-2
Universal selector: *
rpx value transformed from rem and px value

兼容范围

  • Webpack >= 4.0.0
  • Taro >= 3.4.0
  • MPX >= 2.7.5
  • uni-app

mini-program-tailwind's People

Contributors

b1ngx avatar itsryanwu avatar samueljess avatar uxuip avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mini-program-tailwind's Issues

require("windicss/plugin/line-clamp") uniapp小程序不生效

1、windi.config.js配置require("windicss/plugin/line-clamp") ,样式丢失。只留了一个 overflow-hidden;
2、windi.config.js的拓展配置没有覆盖默认的。比如:
theme: {
extend: {
borderWidth: {
"2px": "2px",
}
}

实际生效后是 2rpx; 而不是2px

children:xxx 编译产物错误

比如目前
children:text-red-400
会被编译成
.children-c-text-red-400 > cover-image, cover-view, movable-area, movable-view, scroll-view, swiper, swiper-item, view, icon, progree, rich-text, text, button, checkbox, checkbox-group, editor, form, input, label, picker, picker-view, picker-view-column, radio, radio-group, slider, switch, textarea, navigator, audio, camera, image, live-player, live-pusher, video, map, canvas{--tw-text-opacity:1;color:rgba(248,113,113,var(--tw-text-opacity))}
这没有达到预期效果, 因为>结合的优先级大于逗号

computed 计算属性返回的类名在小程序中没有转换

例如:

const itemClass = computed(() => {
  if (props.type === 'news') {
    return 'w-[220rpx]'
  }
  return 'w-[340rpx]'
})

目前采取的解决方式:

const itemClass = computed(() => {
  let str
  if (props.type === 'news') {
    str = 'w-[220rpx]'
    // #ifdef MP
    str = 'w--220rpx-'
    // #endif
  } else {
    str = 'w-[340rpx]'
    // #ifdef MP
    str = 'w--340rpx-'
    // #endif
  }
  return str
})

提供分包样式隔离功能?

在小程序中有很多分包场景,那么我们是否可以不需要把所有样式全部打入主包?而是自定义配置来决定打入分包还是主包呢?从而避免因主包体积受限造成包体积超额等问题,当然这种问题一般对于css来讲无关紧要,但是如果可以,样式分场景打包输出是很关键的内容。这个问题其实一直都是比较核心的问题,因为目前在社区还没有发现类似的功能实现,希望可以提供类似的解决方案

升级taro3.5.1,webpack5后,部分功能失效

代码:

<template>
    <div>
      <!-- sizes and positions -->
      <div class="pt-[50px] mb-[24px] bg-[#b5b5b5]">1</div>

      <!-- colors -->
      <button class="bg-hex-b2a8bb">2</button>
      <button class="bg-[#b2a8bb]">3</button>
      <button class="bg-[hsl(211.7,81.9%,69.6%)]">4</button>
      <button class="h-[calc(100vh-18rem)] bg-[#444444]">5</button>

    </div>

</template>

webpack5 配置文件

{
	"name": "mp-tailwind-vue3",
	"version": "1.0.0",
	"private": true,
	"description": "mp-tailwind-vue3",
	"templateInfo": {
		"name": "default",
		"typescript": true,
		"css": "none"
	},
	"scripts": {
		"build:weapp": "taro build --type weapp",
		"build:swan": "taro build --type swan",
		"build:alipay": "taro build --type alipay",
		"build:tt": "taro build --type tt",
		"build:h5": "taro build --type h5",
		"build:rn": "taro build --type rn",
		"build:qq": "taro build --type qq",
		"build:jd": "taro build --type jd",
		"build:quickapp": "taro build --type quickapp",
		"dev:weapp": "npm run build:weapp -- --watch",
		"dev:swan": "npm run build:swan -- --watch",
		"dev:alipay": "npm run build:alipay -- --watch",
		"dev:tt": "npm run build:tt -- --watch",
		"dev:h5": "npm run build:h5 -- --watch",
		"dev:rn": "npm run build:rn -- --watch",
		"dev:qq": "npm run build:qq -- --watch",
		"dev:jd": "npm run build:jd -- --watch",
		"dev:quickapp": "npm run build:quickapp -- --watch"
	},
	"browserslist": [
		"last 3 versions",
		"Android >= 4.1",
		"ios >= 8"
	],
	"author": "",
	"dependencies": {
		"@babel/runtime": "^7.18.9",
		"@tarojs/components": "3.5.1",
		"@tarojs/plugin-framework-vue3": "^3.5.1",
		"@tarojs/runtime": "3.5.1",
		"@tarojs/taro": "3.5.1",
		"@tarojs/webpack5-runner": "^3.5.1",
		"@vue/babel-plugin-jsx": "^1.1.1",
		"vue": "^3.0.0"
	},
	"devDependencies": {
		"@babel/core": "^7.18.9",
		"@dcasia/mini-program-tailwind-webpack-plugin": "^1.5.0",
		"@types/webpack-env": "^1.17.0",
		"@typescript-eslint/eslint-plugin": "^5.20.0",
		"@typescript-eslint/parser": "^5.20.0",
		"@vue/compiler-sfc": "^3.2.37",
		"babel-preset-taro": "3.5.1",
		"eslint": "^8.12.0",
		"eslint-config-taro": "3.5.1",
		"eslint-plugin-vue": "^8.0.0",
		"stylelint": "^14.4.0",
		"typescript": "^4.1.0",
		"vue-loader": "^17.0.0",
		"webpack": "^5.74.0"
	}
}

效果:

微信图片_20220731110950
微信图片_20220731111002

方括号语法编译转换产物错误

比如 px-[16px] 没有按照预期编译转换成 px--16px- 而是转换成了 px- 16px 。
但是这种情况是偶然出现。出现的必要但非充分条件是 另外某个代码文件里面className里面也使用了同样的类名 px-[16px]。
目前 px/py/ml 等都有出现上述情况。

环境是: [email protected] 版本

请升级 webpack-sources

版本不一致可能造成webpack5 filesystem cache不能正常工作

 [webpack.cache.PackFileCacheStrategy] Caching failed for pack: Error: No serializer registered for ConcatSource while serializing webpack/lib/util/registerExternalSerializer.webpack-sources/ConcatSource -> Array { 3 items } -> ConcatSource

可能有关的 #62

[BUG] Taro React 非pages目录失效

只有当前page中引入的原子可以在其他目录生效

// page/index/index.tsx
<View className="text-center mt-10">
  <Input />
</View>

// components/Input.tsx
<TaroInput className="mt-10 px-10" /> // 只有mt-10生效

打包失败

使用
taro build --type weapp
打包
下面是bug内容

\ 正在编译...[mini-program-tailwind-plugin]: Class names collection benchmark 0ms
| 正在编译...[mini-program-tailwind-plugin]: Collected []
[mini-program-tailwind-plugin]: Class names replacement benchmark 0ms
�🙅 编译失败败. 2022/7/14 13:20:

./src/pages/test/index.vue) 1:0
Module parse failed: Unexpected token (1:0)
File was processed with these loaders:

  • ./node_modules/@tarojs/taro-loader/lib/raw.js
  • ./node_modules/windicss-webpack-plugin/dist/loaders/windicss-template.cjs
    You may need an additional loader to handle the result of these loaders.

|
|

error Command failed with exit code 1.

请问还缺少哪个loader

在macOS上出现的类名错误

macOS m1
node 16.16.0
@tarojs/cli 3.5.1
@dcasia/mini-program-tailwind-webpack-plugin ^1.5.1

出现top-1/2(1)分数区域的斜杠在页面中的class里变成top-1 2(2),编译出来的css中还是包含top-1-s-2的,在Windows中(3)开发时正常。
code
生成的
code
截图1 截图2 截图3

热更新失效

修改了值必须重新编译之后才能得到,没有了热更新。

编译 *= 语法,导致小程序编译报错

css 代码是这样的

[class*=taroify-] {
  -webkit-tap-highlight-color: transparent;
}

编译出来的css是这样的

[classcover-image, cover-view, movable-area, movable-view, scroll-view, swiper, swiper-item, view, icon, progree, rich-text, text, button, checkbox, checkbox-group, editor, form, input, label, picker, picker-view, picker-view-column, radio, radio-group, slider, switch, textarea, navigator, audio, camera, image, live-player, live-pusher, video, map, canvas=taroify-] {
  -webkit-tap-highlight-color: transparent;
}

在小程序上编译报错了unexpected token `,。麻烦看下这个问题要怎么解决

Taro webpack5 cache enable时的编译问题

taro3.5.2配置cache: {enable:true},当有缓存存在时,编译会出问题
复现:config/index.js中添加compiler: 'webpack5', cache: {enable:true}配置,运行两次yarn dev:weapp或者yarn build:weapp即可复现
初步来看当cache存在时module?._source?_valueAsString会变成undefined,导致跳过了后续的转换。通过module.originalSource()?.source()好像可以获取到内容

不支持 space-y-2 及类似写法

taro 版本:3.5.0-alpha.15
vue 版本:3.2.36

[ WXSS 文件编译错误] ./app.wxss
 error at token ":"
   8 | /* windicss layer utilities */
   9 | 
> 10 | .space-y-2 > :not([hidden]) ~ :not([hidden]) {
     |             ^
  11 |   --tw-space-y-reverse: 0;
  12 |   margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
  13 |   margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
at files://dist/app.wxss#10(env: macOS,mp,1.06.2205231; lib: 2.24.5)

暂不支持对 MPX class name 绑定中的对象增强语法进行处理

MPX 样式类名对象增强语法

简单来说就是类似这样的语法

<!-- 正常使用 -->
<view wx:class="{{ {'text-red-500': true} }}"></view>
<!-- 无法使用 -->
<view wx:class="{{ {'text-[#c0ffee]': true} }}"></view>

如果开发者在 MPX 项目中使用以上 MPX 增强语法来实现动态切换 class name,目前插件不支持对存在特殊字符的类名进行兼容性处理,不过对使用常规字符的 class name 不存在影响。

由于 MPX 对于对象语法是采用 wxs 脚本实现的,我暂未想到合适的方法让插件对该场景下的特殊字符进行处理,目前建议通过其他方式绕过该问题,比如使用小程序原生语法来实现 class name 切换:

<!-- 正常使用 -->
<view class="{{ true ? 'text-[#c0ffee]' : '' }}"></view>

如何排除miniprogram_npm

小程序第三方包构建的npm包含错误,class="{{classPrefix}} {{this.getAvatarGroupOuterClass(classPrefix, size)}} {{prefix}}-class"
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.