iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vite + React从零开始搭建一个开源组件库
  • 866
分享到

Vite + React从零开始搭建一个开源组件库

2024-04-02 19:04:59 866人浏览 泡泡鱼
摘要

目录前言?目标?搭建开发环境?️生成模板?CSS预处理器?eslint?组件库编译⚡️vite的打包配置⚡️自动生成ts类型文件⚡️样式懒加载与全量加载?文档❤️npm 发布与发布前

前言

日常使用开源的组件库时我们或多或少的都会做一些自定义的配置来符合实际的设计,当这些设计形成一定规模时,设计狮们就会形成一套规范,实施到前端这里就变成了组件库。

本文的目标是从0开始搭建一个面向组件库的基础设施,一起来探索下吧~。

?目标

  • 开发环境
  • 组件库编译,需要生成umd和esm模块的组件代码
  • 支持按需导入与全量导入
  • 组件文档/预览
  • 代码格式化和规范检测工具

?搭建开发环境

现在的时间点Vue或者React都可以用Vite来进行开发打包,这里有老前辈Vant的尝试我们可以放心使用~。

?️生成模板

yarn create vite my-components --template react-ts

这里我们创建生成一套react-ts的应用模板,可以仅保留main.tsx用于组件库的开发调试。

?CSS预处理器

CSS预处理器Sass与Less都可以选择,这里用了Sass:

yarn add sass

不需要配置直接用就可以,与它搭配的规则检查可以安装stylelint:

yarn add stylelint stylelint-config-standard stylelint-config-prettier-scss stylelint-config-standard-scss stylelint-declaration-block-no-ignored-properties

同时根目录下新建.stylelintrc:

{
  "extends": [
    "stylelint-config-standard",
    "stylelint-config-prettier-scss",
    "stylelint-config-standard-scss"
  ],
  "plugins": [
    "stylelint-declaration-block-no-ignored-properties"
  ],
  "rules": {
    "no-descending-specificity": null,
    "no-invalid-position-at-import-rule": null,
    "declaration-empty-line-before": null,
    "keyframes-name-pattern": null,
    "custom-property-pattern": null,
    "number-max-precision": 8,
    "alpha-value-notation": "number",
    "color-function-notation": "legacy",
    "selector-class-pattern": null,
    "selector-id-pattern": null,
    "selector-not-notation": null
  }
}

具体的规则可以查看文档,或者直接用ant-design/vant的规范,总之制定一个用起来舒服的即可。

?eslint

eslint与stylelint基本一个套路,这里不再重复,可以直接用开源组件库的规范。

?组件库编译

组件库的编译和默认的应用编译有一些不同,Vite有预设的打包组件库的选项可以帮我们省去大部分自定义的时间。

⚡️vite的打包配置

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

const path = require("path");

const resolvePath = (str: string) => path.resolve(__dirname, str);

export default defineConfig({
  plugins: [react()],
  build: {
    lib: {
      entry: resolvePath("packages/index.ts"),
      name: "componentsName",
      fileName: fORMat => `componentsName.${format}.js`,
    },
    rollupOptions: {
        external: ["react", "react-dom", "antd"],
        output: {
          globals: {
            react: "react",
            antd: "antd",
            "react-dom": "react-dom",
          },
        },      
    },
  },
})

这里我们的入口不是上面的main.tsx,组件库的打包入口需要是一个包含了所有组件的索引文件,大概可以长这样:

import Button from "./button/index";
export { Button };

默认情况下Vite的配置会打包umd和esm两种模式,只需要写一下名字即可。

同时在打包时我们也不希望外部的库打包进去,像必然存在的reactvue,二次封装的组件库antdvant这些都需要剔除出去。

现在直接build可以看到生成了esumd两份不同版本的文件,里面仅存在我们的代码:

yarn build
$ tsc && vite build
vite v2.9.12 building for production...
✓ 10 modules transformed.
dist/componentsName.es.js   2.27 KiB / gzip: 0.97 KiB
dist/componentsName.umd.js   1.81 KiB / gzip: 0.96 KiB
✨  Done in 3.12s.

⚡️自动生成ts类型文件

打包进行到上面已经初步可用,还不具备Ts的类型定义,用在Ts项目里会报错,这里我们可以用Ts的rollup插件来生成对应的类型:

yarn add @rollup/plugin-typescript tslib

Vite中的rollupOptions扩展一下plugins:

{
  ...,
  rollupOptions: {
    ...,
    plugins: [
      typescript({
        target: "es2015", // 这里指定编译到的版本,
        rootDir: resolvePath("packages/"),
        declaration: true,
        declarationDir: resolvePath("dist"),
        exclude: resolvePath("node_modulesstyle/index.scss");

export default req;

插件没有找到可以直接用的插件,这里自己写了一个:

import { compile } from "sass";
import postcss from "postcss";
import postcssImport from "postcss-import";

const autoprefixer = require("autoprefixer");

const path = require("path");

const resolvePath = str => path.resolve(__dirname, str);

const glob = require("glob");

function generateCssPlugin() {
  return {
    name: "generate-css",
    async generateBundle() {
      const files = glob.sync(resolvePath("packagesstyle/*.scss"));

      const allProcess = [];
      const allRawCss = [];

      files.forEach(file => {
        const { css } = compile(file);
        allRawCss.push(css);
        const result = postcss([autoprefixer, postcssImport]).process(css, {
          from: file,
          to: file.replace(resolvePath("packages"), "dist"),
        });

        allProcess.push(result);
      });

      const results = await Promise.all(allProcess);

      results.forEach(result => {
        this.emitFile({
          type: "asset",
          fileName: result.opts.from
            .replace(resolvePath("packages"), "dist")
            .replace("dist/", "")
            .replace("scss", "css"),
          source: result.css,
        });
      });

      // 上半部分编译单独的css,下半部分会把所有css编译为一整个。

      const wholeCss = await postcss([autoprefixer, postcssImport]).process(
        allRawCss.join("\n")
      );

      this.emitFile({
        type: "asset",
        fileName: "styles.css",
        source: wholeCss.css,
      });
    },
  };
}

generateBundle是rollup的插件运行钩子,更多信息可以在这里找到。

再次打包可以看到生成了单个的样式与全量的样式,全量的可以走CDN导入,按需加载的可以用如vite-plugin-imp的构建工具进行按需加载。

?文档

文档我们需要同时兼顾到预览,这里我们可以选择storybook:

npx storybook init

之后不需要配置,直接用即可。

内置的mdx文件可以让我们同时写markdown与jsx:

import { Meta, Story } from "@storybook/addon-docs";

import { Button } from "../packages";

<Meta title="Button" component={Button} />

<canvas>
  <Story name="Button">
    <Button>这里写Jsx</Button>
  </Story>
</Canvas>

# 用法

**markdown 语法**

❤️npm 发布与发布前的测试

npm的发布流程比较简单,直接

npm login

npm version patch

npm publish

就可以了,对于私有的npm仓库地址我们可以在package.JSON中定义:

{
  "publishConfig": {
    "reGIStry": "https://npm.private.com"
  }
}

,除此之外package.json中我们最好还要定义一下此组件库的基础入口信息:

{
  "main": "./dist/componentsName.umd.js",
  "module": "./dist/componentsName.es.js",
  "typings": "./dist/index.d.ts",
}

?测试

发布前的测试不同于单元测试(本文没有折腾单元测试),我们需要将打包好的库给实际的项目去使用,模拟安装发布后的包:

在组件库目录运行:

npm link

这样会基于当前目录的名字创建一个符号链接,之后在实际的项目中再次运行:

npm link componentsName

此时node_modules中对应的包会链接到你的组件库中,在组件库的任何修改都可以及时反馈。

当然不仅仅用于测试,开发时也可以用这种方式。

到此这篇关于Vite + React 如何从0到1搭建一个开源组件库的文章就介绍到这了,更多相关React 搭建组件库内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vite + React从零开始搭建一个开源组件库

本文链接: https://www.lsjlt.com/news/152584.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vite + React从零开始搭建一个开源组件库
    目录前言目标搭建开发环境️生成模板CSS预处理器eslint组件库编译⚡️vite的打包配置⚡️自动生成ts类型文件⚡️样式懒加载与全量加载文档❤️npm 发布与发布前的测试测试前言...
    99+
    2024-04-02
  • 怎么使用Vite+React搭建一个开源组件库
    今天小编给大家分享一下怎么使用Vite+React搭建一个开源组件库的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。目标开发环...
    99+
    2023-07-02
  • 如何从零开始搭建一套ui组件库
    本篇内容介绍了“如何从零开始搭建一套ui组件库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 环境准备我们在编写我们组件库的组件前,首先...
    99+
    2023-07-06
  • 手把手教你从零开始搭建一套ui组件库
    本篇文章给大家带来了关于ui组件的相关知识,其中主要跟大家聊聊怎么从零开始搭建一套ui组件库,有代码示例,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。1. 环境准备我们在编写我们组件库的组件前,首先需要一套环境,包括下面几项:需要为组...
    99+
    2023-05-14
    前端 JavaScript Vue.js
  • github项目从零开始搭建
    Github是程序员必备的开发工具之一,本文将从零开始介绍如何搭建自己的Github项目。一、注册Github账号首先,需要注册一个Github账号,访问 https://github.com/ ,点击右上角的“Sign up”按钮进入注册...
    99+
    2023-10-22
  • 手把手教你从零开始react+antd搭建项目
    之前的文章都是自己的学习日志,主要是防止自己遗忘之前遇到的坑。这次将从最基础的项目搭建开始讲起,做一个基于react和antd的后台管理系统。我会一步步进行下去,所以看完本文你哪怕不...
    99+
    2024-04-02
  • 从零开始,搭建一个简单的UVM验证平台(一)
    前言:         这篇系列将从0开始搭建一个UVM验证平台,来帮助一些学习了SV和UVM知识,但对搭建完整的验证环境没有概念的朋友。 UVM前置基础: 1.UVM基础-factory机制、phase机制 2.UVM基础-组件(...
    99+
    2023-08-31
    java 服务器 数据库
  • 一文带你从零开始搭建vue3项目
    目录说明开始1. 使用 vscode 开发工具安装vue3的插件 Volar ,在vue2中我们使用的是Vetur。2. 执行初始化及安装命令:3. 安装vue-router4. 全...
    99+
    2024-04-02
  • 从零开始搭建Go语言开发的个人网站
    从零开始搭建Go语言开发的个人网站 在当今高度数字化的时代,拥有一个个人网站已经成为许多人的追求。一个个人网站不仅可以展示个人的才艺和经验,还可以成为展示个人品牌的窗口。而作为一个程序员,搭建一个使用Go语言...
    99+
    2024-01-30
  • 从零开始搭建你的第一个Python区块链项目
    1. 区块链概述 区块链是一种分布式数据库,用于以安全、透明和防篡改的方式记录交易。它由一个链状结构组成,其中每个区块都包含一定数量的交易信息、前一个区块的哈希值和其他元数据。区块链的技术核心是分布式账本和共识机制,实质上是一种去中心化...
    99+
    2024-02-23
    区块链 Python 加密 分布式账本 数字货币
  • 如何从零开始搭建vue3项目
    这篇文章主要介绍了如何从零开始搭建vue3项目的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何从零开始搭建vue3项目文章都会有所收获,下面我们一起来看看吧。说明记录一次Vue3的项目搭建过程。文章基于 vu...
    99+
    2023-07-02
  • 从零开始SSM搭建步骤(图文)
    目录第一章:搭建整合环境1. 搭建整合环境第二章:Spring框架代码的编写第三章:Spring整合SpringMVC框架1. 搭建和测试SpringMVC的开发环境2. Sprin...
    99+
    2024-04-02
  • github项目怎么从零开始搭建
    这篇“github项目怎么从零开始搭建”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“github项目怎么从零开始搭建”文章吧...
    99+
    2023-07-06
  • Android开发入门——从零开始构建第一个Android App
    作者:禅与计算机程序设计艺术 1.简介 首先,让我们回顾一下Android系统的特性。Android是一个开源、免费的移动操作系统,最初起源于Google,后被开源。它提供统一的API,使得手机厂商...
    99+
    2023-10-06
    自然语言处理 人工智能 语言模型 编程实践 开发语言 架构设计
  • 从零搭建react+ts组件库(封装antd)的详细过程
    目录整体需求开发与打包工具选型使用webpack作为打包工具使用babel来处理typescript代码使用less-loader、css-loader等处理样式代码项目搭建思路整体...
    99+
    2024-04-02
  • 【Flutter】macOS从零开始使用FVM搭建Flutter开发环境
    前言 本文为个人记录macOS系统使用fvm从零开始搭建flutter开发环境到项目运行的过程,非教程性质,仅供参考,如有疑问或建议,欢迎大家在评论区留言 附上开发设备配置 一、安装vscode 以vscode为编码工具 下载地址:Do...
    99+
    2023-09-02
    macos flutter xcode vscode android studio
  • Discuz论坛建设攻略:从零开始快速搭建
    Discuz论坛建设攻略:从零开始快速搭建 随着互联网的迅猛发展,网络论坛作为一种交流、互动的平台,在网络社区中扮演着重要的角色。而Discuz作为一款开源的论坛系统,具有丰富的功能和...
    99+
    2024-03-02
    论坛 搭建 快速 系统安装
  • 从零开始,快速搭建你的Golang开发环境指南
    Golang开发环境搭建指南:从零开始,轻松构建你的开发环境 引言: Golang是一门简单、高效、可靠的编程语言,由谷歌开发,逐渐成为许多开发者喜爱的选择。搭建一个良好的开发环境是进行Golang开发的必要...
    99+
    2024-01-29
    Golang 开发环境 环境搭建
  • 从0搭建Vue3组件库之如何使用Vite打包组件库
    目录打包配置声明文件本篇文章将介绍如何使用 vite 打包我们的组件库,同时告诉大家如何使用插件让打包后的文件自动生成声明文件(*.d.ts) 打包配置 vite 专门提供了库模式的...
    99+
    2023-03-07
    Vite打包组件库 vue3 Vite打包组件库
  • android从零开始搭建程序的方法是什么
    Android从零开始搭建程序的方法可以分为以下几个步骤:1. 安装开发环境:安装JDK、Android Studio等开发工具。2...
    99+
    2023-06-14
    android从零开始 android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作