当前位置: 首页 > news >正文

构建一个属于组件的组件库

先pass过组件的编写,直接进入组件库的构建。

1、组件库配置

1.1 修改package,json

设置组件库名称、版本号以及支持多格式输出

{"name": "menu-list-component","version": "1.0.0","description": "MenuList 组件库 - 提供工序、系列和菜单项的层级展示功能","main": "lib/index.js","module": "es/index.js","types": "lib/index.d.ts","files": ["lib","es","dist"],

构建版本:

  "scripts": {"start": "dongting-cli serve","serve": "dongting-cli serve","local": "npm run start --local=true","build": "npm run build:lib && npm run build:es && npm run build:dist","build:lib": "rimraf lib && tsc","build:es": "rimraf es && tsc -p tsconfig.esm.json","build:dist": "dongting-cli build","prepare": "npm run build","test": "echo \"Error: no test specified\" && exit 1"},
  "peerDependencies": {"react": ">=16.8.0","react-dom": ">=16.8.0"},

作者与仓库:

 "author": "Your Name","license": "MIT","repository": {"type": "git","url": "git+https://github.com/your-username/menu-list-component.git"},

关键词:

  "keywords": ["react","component","menu","menu-list","react-component"],

依赖:

  "dependencies": {"ahooks": "^3.3.10","antd": "^5.11.0","antd-style": "^3.5.0","lodash": "^4.17.21","react": ">=16.8.0","react-dom": ">=16.8.0"},

dev环境的依赖:

  "devDependencies": {"@biomejs/biome": "1.9.4","@dongting/build-webpack-react": "0.0.24","@metacode/lint": "^1.1.3","@types/lodash": "^4.14.191","@types/react": "^18.0.28","@types/react-dom": "^18.0.0","buffer": "^6.0.3","dongting-cli": "0.0.27","rimraf": "^3.0.2","stream-browserify": "^3.0.0","typescript": "^4.9.5","webpack": "^5.102.1","webpack-cli": "^5.1.4"}

1.2 创建tsconfig.esm.json

配置 ES 模块输出格式的 TypeScript 编译选项

{"extends": "./tsconfig.json","compilerOptions": {"module": "esnext","outDir": "./es"}
}

1.3 配置webpack.config.js

设置library名称和UMD输出格式

配置resolve,fallback(处理node模块兼容性)

声明外部依赖,避免打包react等库

const webpack = require('webpack')module.exports = {// config 是 webpack-chain 的对象,可以链式修改配置default: (config, options) => {//组件库核心配置(library 设置、UMD 输出格式、外部依赖声明)config.output.library('MenuList').libraryTarget('umd').globalObject('this').filename('menu-list.js').pathinfo(false)config.externals({react: 'var window.GPReact','react-dom': 'var window.GPReactDOM',moment: 'var window.moment',lodash: 'var window._',antd: 'var window.GPAntd','@ant-design/pro-form': 'var window.ProForm','@ant-design/pro-table': 'var window.ProTable','@metacode/runtime': 'var window.MetacodeRuntime'})},configureWebpack: (options) => {return {//建所需的依赖解析设置resolve: {fallback: {stream: require.resolve('stream-browserify'),buffer: require.resolve('buffer/')}}}}
}

1.4 创建.npmignore文件

忽略不必要的文件(如 node_modules、源码等)

d:\component\menuList\.npmignore
.git
.gitignore
.vscode
config
node_modules
*.log
dist/*.map
examples
demo

2、依赖安装

# 在 menuList 目录下执行
npm install --save-dev webpack webpack-cli stream-browserify buffer typescript ts-loader
# 使用 --legacy-peer-deps 解决依赖冲突
npm install --legacy-peer-deps

3、构建组件库

# 构建所有格式
npm run build
npm run build:es
npm run build:lib

4、创建可安装的tarball包

# 在 menuList 目录下执行
npm pack

5、如何使用

5.1 安装组件库

# 在目标项目(如 my-react-app)目录下执行
npm install ../menuList/menu-list-component-1.0.0.tgz --legacy-peer-deps

5.2 在项目中导入并使用

/ App.jsx 中导入
import MenuList from 'menu-list-component';// 使用组件
function App() {const menuItems = [// 菜单项数据];return (<div><MenuList menuItems={menuItems} onItemClick={(item) => console.log('点击了:', item)} /></div>);
}

6、修改了如何重新发布?

删除dist文件→npm run build→npm pack

在使用的文件当中:

删除→下载即可

# 卸载旧版本(可选)
npm uninstall menu-list-component# 安装新版本
npm install ../menuList/menu-list-component-1.0.1.tgz --legacy-peer-deps

原代码:https://github.com/xixloveixixi/myComponent

http://www.dtcms.com/a/466707.html

相关文章:

  • 【Linux笔记】网络部分——socket 编程 TCP实现多台虚拟机使用指令访问云服务器
  • 4.5 IP多播 (答案见原书 P208)
  • 照片素材库网站免费免费客户管理软件排行
  • 网站建站建设怀化最新消息今天
  • 社区类网站开发实践辽宁城乡建设厅网站
  • 花生壳建设网站线上运营的5个步骤
  • C语言 ——— 文件操作的核心概念与函数使用
  • 做网站维护的人叫啥电商网站维护费用
  • 高频面试题解析:算法到数据库全攻略
  • c# 使用yolov5模型
  • 表白网站制作代码公司邮箱如何申请
  • 厦门最早做网站的公司二字顺口名字公司
  • 【GIT】错误集锦及解决方案
  • C语言⽂件操作讲解(1~2)
  • 前端代码CR小知识点汇总
  • 企业建站免费模板wordpress访问统计
  • 乐清建站公司做网站哪里最便宜
  • 什么是 Spring AI?Spring AI 入门教程
  • 在线课程网站开发的研究意义客户管理系统免费版
  • 台州宇洋台州网站建设手机在线视频
  • uniapp开发 APP嵌入另一个APP打包的wgt文件,实现点击携带参数跳转到wgtAPP的某一个页面
  • VS2010做网站登录页面步骤可以免费浏览的网站
  • DeepSeek Sparse Attention(DSA)快速洞察(DeepSeek-V3.2)
  • 山西建设银行官方网站wordpress 文章投票插件
  • C++ 模拟 力扣1576. 替换所有的问号 题解 每日一题
  • 安全联盟网站认证网络营销的认识
  • 基于SpringBoot+Vue的少儿编程培训机构管理系(WebSocket及时通讯、协同过滤算法、Echarts图形化分析)
  • 时序数据库promQL
  • 网站安全检测可以监测哪些内容风险信息宜春网站开发
  • 网站建设中企动力强成都那家网站建设好