要开发一个组件库首先咱们要知道的是一个组件库包含哪些部分,参考国内的antd,element UI等UI组件框架基础部分都包含如下几个部分前端
组件的源代码,也是组件库的核心。这里咱们以antd为例,耦合度很是的低,组件与组件之间没有太多的依赖关系,也便于总体项目的维护。antd源码是采用ts进行编写,对组件props参数进行了严格的规范,便于使用者阅读,也便于开发者的维护。 vue
index.tsx 部分文件代码,全部组件将经过index.tsx聚集到一块儿进行导出打包。node
export { default as Affix } from './affix';
export { default as Anchor } from './anchor';
export { default as AutoComplete } from './auto-complete';
export { default as Alert } from './alert';
复制代码
这部分的难点在如何编写出精致且能用于多种场景的组件,虽然没有复杂的业务逻辑,可是要多方面考虑使用者的体验。react
组件编写好以后少不了的是对组件使用方式的描述,包括基本的描述、代码演示、API、注意事项。 这里简单介绍几款工具以及咱们要使用的是哪款(如今前端生态真的是很丰富,能解决大部分的开发问题,以及你想要的工具)jquery
名称 | 描述 | 上手程度 | 地址 | star |
---|---|---|---|---|
bisheng | antd使用 | ⭐️ | www.npmjs.com/package/bis… | 2.3k |
docz | 排行老二 | ⭐️⭐️⭐️ | www.npmjs.com/package/doc… | 18.1k |
Storybook | 功能齐全,提供不少使用插件 | ⭐️⭐️ | www.npmjs.com/package/doc… | 46.2k |
dumi | umi生态 蚂蚁金服 sorrycc 主导开发 | ⭐️⭐️⭐️⭐️⭐️ | github.com/umijs/dumi | 213 |
咱们这里采用的dumi工具,很是容易上手,中文文档齐全,支持 mdx 写法,能直接在 md 中编写 react 组件进行渲染。 并且是umi生态后劲十足,由于是3月2号才发布正式版因此star有点少,可是相信在蚂蚁金服做为爸爸的状况下仍是可以发展的不错的。界面效果和antd也是极为类似。webpack
// 建立组件开发的目录
$ mkdir library && cd library
// 安装 dumi
$ npm i dumi
// 建立文档
$ mkdir docs && echo '# Hello dumi!' > docs/index.md
// 预览文档
$ dumi dev
复制代码
为了保证项目的稳定自动化测试起到一个很是关键的做用,react自动化测试要使用到的工具为git
import {shallow} from 'enzyme';
describe('Enzyme Shallow', function () {
it('App\'s title should be Todos', function () { let app = shallow(<App/>); expect(app.find('h1').text()).to.equal('Todos'); }); }; 复制代码
文档地址: d.umijs.org/github
打包咱们这里采用的 umi-father,也是属于umi生态,只须要简洁的配置就能够打包出任意你须要的格式, 这里给你们简单介绍几种打包格式:web
yarn add father
复制代码
打包npm
father build
复制代码
新建 .fatherrc.js 文件进行配置打包的时候会自动识别这个配置文件而后进行打包处理
export default {
extractCSS: true,
esm: {
type: 'rollup'
},
cjs: 'rollup',
extraBabelPlugins: [
['import', { libraryName: 'tts', libraryDirectory: 'es', style: true }],
],
entry: '/components/index.ts',
lessInBabelMode: true,
}
复制代码
在npm上咱们能够上传本身的组件,首先你得须要一个npm帐号,注册好这个帐号以后,在本地经过命令行npm login
来进行登陆, 而后经过npm publish
来进行上传,可是这里要特别注意的是经过package.json文件来作一些配置。
为了保护本身企业内部的一些库的安全性,和私密性,能够选择两种方案,一种是购买npm的付费服务,就好像github的付费服务同样的你能够自定义本身私有的库,还有一种就是搭建本身私有的npm库,那么你们确定会问怎么获取公有的npm包呢,这里有个verdaccio工具帮我解决了这个问题,它的核心原理是修改npm远程获取包的连接,那么在npm install 的过程当中,他会先获取 verdaccio 上面咱们挂载的包,若是 verdaccio 包管理工具没有,那么他就会去获取 npm 上面的包,就解决了这个问题。 安装
npm install -g verdaccio
复制代码
启动
$> verdaccio
warn --- config file - /home/.config/verdaccio/config.yaml
warn --- http address - http://localhost:4873/ - verdaccio/3.0.0
复制代码
你能够经过如下命令来设置npm从哪一个源下载
npm set registry http://localhost:4873/
复制代码
你也能够在下载的时候带上参数
npm install --registry http://localhost:4873
复制代码
当咱们去下载npm包的时候就会去本身的包管理服务去下载了 文档地址: verdaccio.org/
其实开发一个私有的ui组件库并不难,难就难在须要大量的前端知识作支撑,不是须要知识面有多深而是知识面要很广,react、js、ts、less、webpack、npm 包管理、jest、enzyme、babel、等等,深度的问题是留在咱们具体写某些组件须要思考的。本文的也是给你们提供一些思路,具体的描述也不是最全面的,还有不少内容是能够扩展的,你们能够相互探讨学习。 微信公众号二维码.jpg