使用 rollup 封装 React + Ant Design组件库

创建rollup环境

mkdir rollup-demo
cd rollup-demo
pnpm init
pnpm add rollup -D

目录结构

项目目录结构

添加rollup官方依赖

pnpm add @rollup/plugin-babel @rollup/plugin-commonjs @rollup/plugin-node-resolve @rollup/plugin-terser @rollup/plugin-typescript -D

添加第三方依赖

pnpm add @babel/core @babel/preset-env @babel/preset-react tslib -D
pnpm add antd react

rollup.config.mjs


import babel, { getBabelOutputPlugin } from "@rollup/plugin-babel";
import commonjs from "@rollup/plugin-commonjs";
import resolve from "@rollup/plugin-node-resolve";
import terser from "@rollup/plugin-terser";
import typescript from "@rollup/plugin-typescript";

export default {
  plugins: [
    resolve(),
    commonjs(),
    typescript({
      tsconfig: "./tsconfig.json",
      declaration: false,
      jsx: "preserve",
    }),
    babel({
      presets: ["@babel/preset-react"],
      babelHelpers: "bundled",
      extensions: [".js", ".jsx", ".es6", ".es", ".mjs", ".ts", ".tsx"],
    }),
    terser(),
  ],
  input: ["src/index.ts"],
  output: [
    {
      dir: "dist",
      format: "es",
      name: "version",
      plugins: [
        getBabelOutputPlugin({
          presets: ["@babel/preset-env"],
        }),
      ],
    },
  ],
  // 指出哪些模块需要被视为外部引入
  external: ["react", "antd"],
};

.babelrc.json

{
  "presets": [["@babel/env", { "modules": false }]]
}

tsconfig.json

{
  "compilerOptions": {
    "target": "ES2020",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noEmit": true,
    "esModuleInterop": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "jsx": "preserve",
    "incremental": true
  },
  "include": ["types/*.d.ts", "src/**/*.ts", "src/**/*.tsx", "src/**/*.d.ts"],
  "exclude": ["node_modules"]
}

添加Tailwind css

pnpm add rollup-plugin-postcss postcss postcss-import autoprefixer cssnano tailwindcss -D

改造 rollup.config.mjs

// rollup.config.mjs
import babel, { getBabelOutputPlugin } from "@rollup/plugin-babel";
import commonjs from "@rollup/plugin-commonjs";
import resolve from "@rollup/plugin-node-resolve";
import terser from "@rollup/plugin-terser";
import typescript from "@rollup/plugin-typescript";
import postcss from "rollup-plugin-postcss";
import PostcssImport from "postcss-import";
import tailwindcss from "tailwindcss";
import autoprefixer from "autoprefixer";
import cssnano from "cssnano";

export default {
  plugins: [
    postcss({
      modules: true,
      extract: true,
      plugins: [
        PostcssImport(),
        tailwindcss({ content: ["./src/**/*.{js,ts,jsx,tsx}"] }),
        autoprefixer(),
        cssnano(),
      ],
    }),
    resolve(),
    commonjs(),
    typescript({
      tsconfig: "./tsconfig.json",
      declaration: false,
      jsx: "preserve",
    }),
    babel({
      presets: ["@babel/preset-react"],
      babelHelpers: "bundled",
      extensions: [".js", ".jsx", ".es6", ".es", ".mjs", ".ts", ".tsx"],
    }),
    terser(),
  ],
  input: ["src/index.ts"],
  output: [
    {
      dir: "dist",
      format: "es",
      name: "version",
      plugins: [
        getBabelOutputPlugin({
          presets: ["@babel/preset-env"],
        }),
      ],
    },
  ],
  // 指出哪些模块需要被视为外部引入
  external: ["react", "antd"],
};

src/style/tailwind.css

/* @tailwind base; */
@tailwind components;
@tailwind utilities;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值