没有统一组件库,具体问题表如今如下几点:css
TO C 业务当然千奇百怪,但总有类似之处,如何与业务结合,分离可变与不可变,提升开发效率,正是工程师存在的意义(固然也须要产品【业务抽象】以及设计【ui 规范】同窗的共同参与)。node
若是不一样项目设计风格实在差别较大,也可以经过改改样式复用,而非重写一遍逻辑以及兼容性处理。react
既要有造轮子的能力(我的),也要有不造轮子的觉悟(团队)。webpack
一般咱们通常会提供三种形式的模块:git
想要深刻能够看import、require、export、module.exports 混合详解这篇文章,此处只须要知道提供何种形式的模块以及何提供它们便可。github
应用开发者一般会在 babel-loader 中 exclude 掉 node_modules,因此咱们发出的包须要转成 es5 语法,避免在低版本浏览器上不兼容,可使用 babel 以及 tsc 进行处理,如今 babel 也支持 typescript,建议直接使用 babel,还能够进行相关插件配置。web
在转译时,会存在一些辅助函数(helpers),这些函数式会在每个文件生成,建议使用@babel/plugin-transform-runtime
以及@babel/runtime
将辅助函数抽离,能够减少打包体积的大小且能够复用宿主项目的@babel/runtime
。typescript
@babel/polyfill
污染宿主环境;@babel/plugin-transform-runtime
结合@babel/runtime-corejs3
,避免污染全局,但存在"foobar".includes("foo") 的代码的话也是无能为力;若是宿主应用直接一个import '@babel/polyfill'
,咱们基本躺着就好。gulp
其实关于语法转译还有 polyfill 有一种名为
后编译
的操做。后编译:指的是应用依赖的 NPM 包并不须要在发布前编译,而是随着应用编译打包的时候一块编译。是一种性能优化手段,更多可参见webpack 应用编译优化之路。浏览器
先谈谈单组件开发,相似react-slick
这种包含样式的典型组件。
单组件样式处理和平时开发的应用样式处理较为相似,直接打包出一份 css 样式文件,交由使用方引入便可。
固然也能够直接将 css 打入 js 文件,使用方无需引入。
组件库(如 antd)则较为麻烦,由于要达到样式按需引入的效果。
首先咱们组件库的模块处理方式有如下 3 种:
若是是 umd 形式,很明显和按需引入无缘,只须要经过rollup
直接打包抽离 css 文件,交由使用方外链引入。
而 cjs 以及 esm 的形式,要实现样式的按需引入,则有如下 4 种方式:
使用 sass/less/stylus 等预处理器开发,相应组件内部直接 import 相应(.scss/.less/.styl)文件。
使用 css 开发,相应组件内部直接 import 样式文件。
antd 处理方案。使用 sass/less/stylus 等预处理器开发,相应组件不 import 样式文件,编写 style/index.js 管理组件间的样式依赖(sass/less/stylus),生成 style/css.js 管理组件间样式依赖(css),使用方根据宿主项目预处理器选择引入 style/index.js 或 style/css.js。
css in js 方案。使用 styled-components,相关文章:精读《请中止 css-in-js 的行为》。
- [dora-ui](https://github.com/worldzhao/dora-ui "dora-ui")
- [react-component-template](https://github.com/worldzhao/react-componet-template "react-component-template")
复制代码