| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- // uno.config.ts
- import {
- type Preset,
- defineConfig,
- presetUno,
- presetAttributify,
- presetIcons,
- transformerDirectives,
- transformerVariantGroup,
- SourceCodeTransformer,
- cssIdRE,
- } from 'unocss'
- import { presetApplet, presetRemRpx, transformerAttributify } from 'unocss-applet'
- // const common = require('./scripts/common.js')
- // @see https://unocss.dev/presets/legacy-compat
- // import { presetLegacyCompat } from '@unocss/preset-legacy-compat'
- const isMp = process.env?.UNI_PLATFORM?.startsWith('mp') ?? false
- const presets: Preset[] = []
- if (isMp) {
- // 使用小程序预设
- presets.push(presetApplet(), presetRemRpx())
- } else {
- presets.push(
- // 非小程序用官方预设
- presetUno({
- transition: '',
- }),
- // 支持css class属性化
- presetAttributify(),
- )
- }
- // const index = 0
- /** 性能优化,
- * 去掉unocss全局变量,解决浏览器调试卡顿问题
- */
- function optimization(): SourceCodeTransformer {
- return {
- name: 'my-transformer',
- enforce: 'pre', // enforce before other transformers
- idFilter(id) {
- // 样式文件
- return cssIdRE.test(id)
- },
- async transform(code, id, { uno }) {
- // common.files.write(common.files.getPath(`temp/${index++}.html`), code.toString())
- code.replace(/\/\* layer: preflights \*\/[\s\S]+un-backdrop-sepia: ;\}\n/, '')
- },
- }
- }
- /** __uno.css中的样式名称增加.container 前缀,提高样式权重 */
- function classNamePreContainer(): SourceCodeTransformer {
- return {
- name: 'classNamePreContainer',
- enforce: 'pre', // enforce before other transformers
- idFilter(id) {
- // __uno.css
- return id.includes('__uno.css') || id.includes('app.wxss')
- },
- async transform(code, id, { uno }) {
- code.replace(/(\.(?:(?!container).+))\{/g, '.container$1,.container $1{')
- },
- }
- }
- export default defineConfig({
- presets: [
- ...presets,
- // 支持图标,需要搭配图标库,eg: @iconify-json/carbon, 使用 `<button class="i-carbon-sun dark:i-carbon-moon" />`
- presetIcons({
- scale: 1.2,
- warn: true,
- extraProperties: {
- display: 'inline-block',
- 'vertical-align': 'middle',
- },
- }),
- // 将颜色函数 (rgb()和hsl()) 从空格分隔转换为逗号分隔,更好的兼容性app端,example:
- // `rgb(255 0 0)` -> `rgb(255, 0, 0)`
- // `rgba(255 0 0 / 0.5)` -> `rgba(255, 0, 0, 0.5)`
- // 与群友的正常写法冲突,先去掉!(2024-05-25)
- // presetLegacyCompat({
- // commaStyleColorFunction: true,
- // }) as Preset,
- ],
- /**
- * 自定义快捷语句
- * @see https://github.com/unocss/unocss#shortcuts
- */
- shortcuts: [['center', 'flex justify-center items-center']],
- // 仅h5有效, 编译、打包小程序不会触发
- transformers: [
- classNamePreContainer(),
- optimization(),
- // 启用 @apply 功能
- transformerDirectives(),
- // 启用 () 分组功能
- // 支持css class组合,eg: `<div class="hover:(bg-gray-400 font-medium) font-(light mono)">测试 unocss</div>`
- transformerVariantGroup(),
- // Don't change the following order
- transformerAttributify({
- // 解决与第三方框架样式冲突问题
- prefixedOnly: true,
- prefix: 'fg',
- }),
- ],
- rules: [
- [
- 'p-safe',
- {
- padding:
- 'env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)',
- },
- ],
- ['pt-safe', { 'padding-top': 'env(safe-area-inset-top)' }],
- ['pb-safe', { 'padding-bottom': 'env(safe-area-inset-bottom)' }],
- ],
- })
- /**
- * 最终这一套组合下来会得到:
- * mp 里面:mt-4 => margin-top: 32rpx == 16px
- * h5 里面:mt-4 => margin-top: 1rem == 16px
- *
- * 如果是传统方式写样式,则推荐设计稿设置为 750,这样设计稿1px,代码写1rpx。
- * rpx是响应式的,可以让不同设备的屏幕显示效果保持一致。
- */
|