如何封装一个react组件(类库)发布到npm
一、背景:在日常开发中,我们会基于项目对一些通用的组件进行封装,并在项目中进行调用。当一个组件被多个项目调用,需要升级维护时,就会出多次修改的情况,这种维护成本无疑是比较高的。所以,我们此时需要将组件发布到npm上,进行统一版本管理。项目中直接从npm上加载最新的包就可以了。
\
1、前提要求:
安装了Git、基本掌握npm、git使用方法、熟练使用 JavaScript & ES6 & CSS、熟练React或者vue相关生态;
2、开始:
2.1 配置git和npm 在github上创建一个新的远程仓库 l
本地运行git clone命令;
将lk-utils克隆到本地 例:git clone github.com/1995lk/lk-u…
\
二、第一部分:封装一个react组件
1. 初始化一个package.json
yarn init
2、安装相关插件包
"devDependencies": {
"@babel/core": "^7.10.4",
"@hot-loader/react-dom": "^16.13.0",
"@babel/preset-env": "^7.10.4",
"@babel/preset-react": "^7.10.4",
"autoprefixer": "^9.8.4",
"babel-loader": "^8.1.0",
"clean-webpack-plugin": "^3.0.0",
"css-loader": "^3.6.0",
"html-webpack-plugin": "^4.3.0",
"optimize-css-assets-webpack-plugin": "^5.0.3",
"postcss-loader": "^3.0.0",
"style-loader": "^1.2.1",
"terser-webpack-plugin": "^3.0.6",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.12",
"webpack-dev-server": "^3.11.0",
"webpack-merge": "^5.0.9",
"webpack-node-externals": "^2.5.0"
},
"dependencies": {
"react": "^16.13.1",
"react-dom": "^16.13.1"
}\
3. 准备文件夹目录
4、编写组件内容
5、public/index.html
6、webpack.base.config.js文件
7、webpack.dev.config.js
8、webpack.prod.config.js
9、在package.json中添加配置
{
"name": "@sky_lv/utils-web",
"version": "1.0.1",
"description": "A powerful class library",
"main": "src/index.js",
"repository": "github.com/1995lk/lk-u…",
"author": "lvkuo",
"license": "MIT",
"scripts": {
"build": "webpack --config ./scripts/webpack.prod.config.js",
"dev": "webpack-dev-server --config ./scripts/webpack.dev.config.js"
},
"devDependencies": {
"@babel/core": "^7.10.4",
"@hot-loader/react-dom": "^16.13.0",
"@babel/preset-env": "^7.10.4",
"@babel/preset-react": "^7.10.4",
"autoprefixer": "^9.8.4",
"babel-loader": "^8.1.0",
"clean-webpack-plugin": "^3.0.0",
"css-loader": "^3.6.0",
"html-webpack-plugin": "^4.3.0",
"optimize-css-assets-webpack-plugin": "^5.0.3",
"postcss-loader": "^3.0.0",
"style-loader": "^1.2.1",
"terser-webpack-plugin": "^3.0.6",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.12",
"webpack-dev-server": "^3.11.0",
"webpack-merge": "^5.0.9",
"webpack-node-externals": "^2.5.0"
},
"dependencies": {
"react": "^16.13.1",
"react-dom": "^16.13.1"
},
"publishConfig": {
"access": "public",
"registry": "registry.npmjs.org/"
}
}
10、属性说明
name: 包名,当建自己的私有仓库时,建议在包名前加一个scoped,如@sky-lk/utils-web,而不是utils-web,因为 npm 包特别的多,很容易重复。这样这个包就会是私有的,可以通过 npm publish --access=public 将这个包变为共有的包。
version: 包的版本,每次发布包的版本不能和上次一样。详细规范可见这里
description:包的简介。
repository:适合写 Github 地址,建议写成::username/:repository。
license:认证。不知道该用什么的,就写MIT 吧。
main:包的入口文件。就是引入这个包的时候去加载的入口文件。
keywords:添加一些关键词更容易使你的包被搜索到。
11、调试本地开发:yarn dev
12、打包组件:yarn build
第二部分:将组件或者类库发布到npm
1.将源码发布到github上
1.1 在自己的github上新建一个respository,名称为lk-utils,并生成README.md
完成将项目源码发布至github上。
2、准备/注册npm账号,npm官网地址:www.npmjs.com/
2.1、在组件的项目根目录下登录npm。
npm login
2.2、按照提示输入username、password、email;登录后,可以通过npm whoami来查看登录用户信息。
2.3、发布组件到npm上
npm publish --access=public
2.4、在新项目中安装
yarn add @sky_lv/utils-web
注释:项目中类库方式引用
import { getLog, getLog2 } from '@sky_lv/utils-web';