#tailwind #swc #macro #stailwc #vite #nextjs #next

nightly macro tailwind-parse-macro

tailwind-parse 的过程宏

12 个版本 (重大更新)

0.17.0 2023年6月9日
0.15.0 2023年2月20日
0.12.0 2022年12月27日
0.9.0 2022年11月5日

#6 in #nextjs

Download history 6/week @ 2024-03-11 9/week @ 2024-03-18 12/week @ 2024-04-01 108/week @ 2024-04-08 1/week @ 2024-04-22 4/week @ 2024-05-27

每月下载 103 次
2 个 crate 中使用 (通过 tailwind-parse)

MIT/Apache

10KB
198

stailwc (快速 Tailwind 编译器)

这是一个实验性的 SWC 编译器,可以将编译时 Tailwind 宏引入 SWC (和 nextjs) - 类似 twin macro。目标是提供与基于 babel 的替代方案相当好的编译时舒适性和灵活性,同时性能更佳。支持 emotionstyled-components 的 CSS-in-JS,以及许多构建系统,如 SWC、nextjs、Vite 等。

兼容性图表

我们目前正在测试以下版本。其他不在这些版本之外的版本可能仍然可用。

stailwc NextJS Emotion Styled Components swc Vite
最新版 13.4.3 11.10.5 5.3.6 1.3.24 4.1.0

功能图表

功能 Emotion Styled Components
tw JSX 属性
tw 模板标签
tw 组件语法
tw 组件扩展语法
全局样式
插件参数建议

入门指南

> npm add -D stailwc
> yarn add -D stailwc
> pnpm add -D stailwc

要开始使用 NextJS,请在您的 next.config.js 中放置以下内容。有关其他框架/工具,请参阅示例。

next.config.js

const stailwc = require("stailwc/install");

/** @type {import('next').NextConfig} */
const nextConfig = {
  reactStrictMode: true,
  swcMinify: true,
  experimental: {
    swcPlugins: [
      stailwc({
        engine: "emotion", // or "styled-components"
      }),
    ],
  },
  compiler: {
    emotion: true,
    // or
    styledComponents: true,
  },
};

module.exports = nextConfig;

可选,您还可以通过包含 <TailwindStyle /> 组件来包含 Tailwind 正规化器 + 表单插件。请参阅相关示例。

_document.tsx

import { TailwindStyle } from "stailwc";

export default function App({ Component, pageProps }) {
  return (
    <>
      <TailwindStyle />
      <Component {...pageProps} />
    </>
  );
}

类型

要使类型生效,您需要执行以下步骤。您需要将 stailwc.d.ts 添加到源文件夹的根目录。

用法

tw 标签

您可以通过两种方式与 stailwc 交互。第一种是通过 tw JSW 属性,第二种是通过 tw 模板标签。

import { useState } from "react";

export const ColorButton = () => {
  const [clicked, setClicked] = useState(0);
  return (
    <button
      tw="p-1 m-4 text-green bg-white hover:(bg-gray text-yellow md:text-red) border-3"
      css={clicked % 2 == 0 ? tw`border-green` : tw`border-blue`}
      onClick={() => setClicked(clicked + 1)}
    >
      Clicked {clicked} times
    </button>
  );
};

组件语法

您还可以使用 tw 模板标签创建样式化组件。这将自动为 emotionstyled-components 创建正确的语法。

export const StyledButton = tw.button`p-1 m-4 text-green bg-white hover:(bg-gray text-yellow md:text-red) border-3`;
export const ShadowButton = tw(StyledButton)`shadow-lg`;

示例

提供了 emotionstyled-components 的示例。您可以通过克隆仓库并在示例目录中运行 yarn 然后运行 yarn dev 来运行它们。您首先需要 stailwc

依赖关系

约 2MB
约 44K SLoC