沒有統一組件庫,具體問題表如今如下幾點: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")
複製代碼