從零到一:如何系統化封裝并發布 React 組件庫到 npm

1. 項目初始化

1.1 創建項目

首先,創建一個新的項目目錄并初始化 package.json 文件。

mkdir my-component-library
cd my-component-library
npm init -y
1.2 安裝依賴

安裝開發所需的依賴項,如構建工具、測試框架等。

npm install --save-dev webpack webpack-cli babel-loader @babel/core @babel/preset-env @babel/preset-react css-loader style-loader sass-loader node-sass

2. 項目結構設計

設計合理的項目結構,便于維護和擴展。

my-component-library/
├── src/
│   ├── components/
│   │   ├── Button/
│   │   │   ├── Button.js
│   │   │   ├── Button.scss
│   │   ├── Input/
│   │   │   ├── Input.js
│   │   │   ├── Input.scss
├── dist/
├── .babelrc
├── webpack.config.js
├── package.json
├── README.md

3. 編寫組件

src/components 目錄下編寫組件代碼。例如,創建一個 Button 組件。

// src/components/Button/Button.js
import React from 'react';
import './Button.scss';const Button = ({ children, onClick }) => {return (<button className="button" onClick={onClick}>{children}</button>);
};export default Button;
// src/components/Button/Button.scss
.button {padding: 10px 20px;background-color: #007bff;color: white;border: none;border-radius: 5px;cursor: pointer;
}

4. 配置 Babel

創建 .babelrc 文件,配置 Babel 以支持 React 和 ES6+ 語法。

{"presets": ["@babel/preset-env", "@babel/preset-react"]
}

5. 配置 Webpack

創建 webpack.config.js 文件,配置 Webpack 以打包組件庫。

const path = require('path');module.exports = {entry: './src/index.js',output: {path: path.resolve(__dirname, 'dist'),filename: 'index.js',library: 'MyComponentLibrary',libraryTarget: 'umd',},module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: {loader: 'babel-loader',},},{test: /\.scss$/,use: ['style-loader', 'css-loader', 'sass-loader'],},],},externals: {react: 'react','react-dom': 'react-dom',},
};

6. 打包組件庫

運行 Webpack 打包組件庫。

npx webpack --mode production

7. 配置 package.json

確保 package.json 中的 main 字段指向打包后的文件,并添加必要的元信息。

{"name": "my-component-library","version": "1.0.0","main": "dist/index.js","scripts": {"build": "webpack --mode production"},"peerDependencies": {"react": "^17.0.0","react-dom": "^17.0.0"},"files": ["dist"]
}

8. 發布到 npm

8.1 注冊 npm 賬號

如果還沒有 npm 賬號,先注冊一個。

npm adduser
8.2 登錄 npm

使用 npm 賬號登錄。

npm login
8.3 發布

發布組件庫到 npm。

npm publish

9. 版本管理和更新

每次發布新版本時,更新 package.json 中的版本號,并重新發布。

npm version patch # 或 minor, major
npm publish

10. 文檔和示例

編寫詳細的文檔和示例,幫助用戶快速上手。可以在項目中添加 README.md 文件,并提供一個示例項目。

11. 持續集成和測試

配置持續集成(CI)工具,如 GitHub Actions 或 Travis CI,確保每次提交都通過測試。

12. 社區和維護

積極響應用戶反饋,定期更新和維護組件庫,確保其兼容性和穩定性。

總結

通過以上步驟,你可以將組件封裝為組件庫并發布到 npm 上。這個過程不僅涉及代碼編寫,還包括項目配置、打包、發布和維護等多個環節。合理的項目結構和良好的文檔是成功的關鍵。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73206.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73206.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73206.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

現代互聯網網絡安全與操作系統安全防御概要

現階段國與國之間不用對方路由器&#xff0c;其實是有道理的&#xff0c;路由器破了&#xff0c;內網非常好攻擊&#xff0c;內網共享開放端口也非常多&#xff0c;更容易攻擊。還有些內存系統與pe系統自帶瀏覽器都沒有javascript腳本功能&#xff0c;也是有道理的&#xff0c;…

2025-03-12 學習記錄--C/C++-PTA 習題8-4 報數

合抱之木&#xff0c;生于毫末&#xff1b;九層之臺&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、題目描述 ?? 習題8-4 報數 報數游戲是這樣的&#xff1a;有n個人圍成一圈&#xff0c;按順序從1到n編好號。從第一個人開…

【js逆向】某預約票網站 (webpack技術)

1、查看數據包 calendar是需要的數據包&#xff0c;看下它的請求參數。 accTimes參數加密&#xff0c;_times是時間戳。 2、全局搜索 accTimes 關鍵字 3、n的定義 4、把整個js代碼復制下來&#xff0c;應用到了webpack技術&#xff0c;圖中的Q是n

前端模塊管理新思路:如何使用 Import Maps

前言 前端開發中&#xff0c;我們常常需要使用各種庫和模塊來構建功能豐富的應用。在傳統方式中&#xff0c;管理這些庫和模塊的引用可能會有些繁瑣。 幸運的是&#xff0c;Import Maps 的出現為我們提供了一種更簡潔和高效的解決方案。今天我們就來聊聊如何使用 Import Maps。…

AI模型的構建過程是怎樣的(下)

你好,我是舒旻。 上節課,我們講了一個模型構建的前 2 個環節,模型設計和特征工程。今天,我們繼續來講模型構建的其他 3 個環節,說說模型訓練、模型驗證和模型融合中,算法工程師的具體工作內容,以及 AI 產品經理需要掌握的重點。 模型訓練 模型訓練是通過不斷訓練、驗證…

人工智能混合編程實踐:Python ONNX進行圖像超分重建

人工智能混合編程實踐:Python ONNX進行圖像超分重建 前言相關介紹Python簡介ONNX簡介圖像超分辨率重建簡介應用場景前提條件實驗環境項目結構使用Python ONNX進行圖像超分重建sr_py_infer.py參考文獻前言 由于本人水平有限,難免出現錯漏,敬請批評改正。更多精彩內容,可點擊…

視頻理解之Actionclip(論文宏觀解讀)

配合解讀代碼解讀 1.研究背景 1. 視頻行為識別的重要性 視頻行為識別是視頻理解領域的核心任務之一&#xff0c;旨在通過分析視頻內容來識別和分類其中的人物行為或活動。這一任務在多個領域具有重要的應用價值&#xff0c;例如智能監控、人機交互、自動駕駛、醫療健康等。隨…

【mysql】centOS7安裝mysql詳細操作步驟!

【mysql】centOS7安裝mysql詳細操作步驟&#xff01;—通過tar包方式 需要 root 權限&#xff0c;使用 root 用戶進行命令操作。 1. 查看 CentOS 版本 cat /etc/redhat-release2. 安裝rpm包&#xff0c;以8為例 打開 MySQL 官方 yum 倉庫網站&#xff0c;獲取與當前 CentOS …

【網絡編程】事件選擇模型

十、基于I/O模型的網絡開發 10.9 事件選擇模型 10.0.1 基本概念 事件選擇(WSAEventSelect) 模型是另一個有用的異步 I/O 模型。和 WSAAsyncSelect 模 型類似的是&#xff0c;它也允許應用程序在一個或多個套接字上接收以事件為基礎的網絡事件通知&#xff0c;最 主要的差別在…

STM32 F407ZGT6開發板

#ifndef _tftlcd_H #define _tftlcd_H #include "system.h" //定義LCD彩屏的驅動類型 可根據自己手上的彩屏背面型號來選擇打開哪種驅動 //#def…

江科大51單片機筆記【15】直流電機驅動(PWM)

寫在前言 此為博主自學江科大51單片機&#xff08;B站&#xff09;的筆記&#xff0c;方便后續重溫知識 在后面的章節中&#xff0c;為了防止篇幅過長和易于查找&#xff0c;我把一個小節分成兩部分來發&#xff0c;上章節主要是關于本節課的硬件介紹、電路圖、原理圖等理論…

鴻蒙模擬器運行NDK項目失敗 9568347

鴻蒙編譯NDK項目 模擬器運行NDK項目失敗 9568347 23:32:17.572: $ hdc file send D:\study\hongmeng\MyTestNdk\entry\build\default\outputs\default\entry-default-unsigned.hap "data/local/tmp/9fff4611338a424bb31b521bdc3555af" in 30 ms 23:32:17.651: $ hd…

uniapp+Vue3 開發小程序的下載文件功能

小程序下載文件&#xff0c;可以先預覽文件內容&#xff0c;然后在手機上打開文件的工具中選擇保存。 簡單示例&#xff1a;&#xff08;復制到HBuilder直接食用即可&#xff09; <template><view class"container-detail"><view class"example…

電機控制常見面試問題(九)

文章目錄 一、談談電機死區時間1.死區時間過短的后果&#xff1a;2.如何判斷死區時間不足?3.解決方案 二、請描述對實時操作系統&#xff08;RTOS&#xff09;的理解三.解釋FOC算法的原理并比較與其他無刷電機控制算法的優劣四.什么是電機堵轉&#xff0c;如何避免電機堵轉五.…

【分布式】聊聊分布式id實現方案和生產經驗

對于分布式Id來說&#xff0c;在面試過程中也是高頻面試題&#xff0c;所以主要針對分布式id實現方案進行詳細分析下。 應用場景 對于無論是單機還是分布式系統來說&#xff0c;對于很多場景需要全局唯一ID&#xff0c; 數據庫id唯一性日志traceId 可以方便找到日志鏈&#…

【性能測試】Jmeter如何做一份測試報告(3)

本篇文章主要介紹Jmeter中下載插件&#xff08;Jmeter Plugins&#xff09; 如何使用監聽器插件&#xff0c;線程組插件&#xff0c;梯度壓測線程組 測試報告需要去關注的數據&#xff0c;怎么看測試報告圖表 目錄 一&#xff1a;插件下載 1&#xff1a;下載地址 2&#xff…

cocos creator使用mesh修改圖片為圓形,減少使用mask,j減少drawcall,優化性能

cocos creator版本2.4.11 一個mask占用drawcall 3個以上&#xff0c;針對游戲中技能圖標&#xff0c;cd,以及多玩家頭像&#xff0c;是有很大優化空間 1.上代碼&#xff0c;只適合單獨圖片的&#xff0c;不適合在圖集中的圖片 const { ccclass, property } cc._decorator;c…

AI重構SEO關鍵詞布局

內容概要 在搜索引擎優化&#xff08;SEO&#xff09;領域&#xff0c;AI技術的深度應用正在顛覆傳統關鍵詞布局邏輯。通過機器學習算法與語義分析模型&#xff0c;智能系統能夠實時解析海量搜索數據&#xff0c;構建動態詞庫并精準捕捉用戶意圖。相較于依賴人工經驗的關鍵詞篩…

泛微ecode的頁面開發發送請求參數攜帶集合

1.在開發過程中我們難免遇見會存在需要將集合傳遞到后端的情況&#xff0c;那么這里就有一些如下的注意事項&#xff0c;如以下代碼&#xff1a; // 新增action.boundasync addQuestion(formData) {var theList this.questionAnswerList;var questionAnswerListArray new Ar…

20250212:linux系統DNS解析卡頓5秒的bug

問題: 1:人臉離線識別記錄可以正常上傳云端 2:人臉在線識別請求卻一直超時 3:客戶使用在線網絡 思路: