基于dumi的组件开发初体验
最近呢,公司业务要用到工作流,不知道谁选的技术选型,反正不是我,就是要基于bpmn.js去做开发,并且要做成公共组件,发布到公司的私有库里面,供其他项目组的同事调用。由于我说了不该说的话,所以这个任务就落在了我的头上。以前没有做过组件开发,所以一步一个坎,遇到了很多坑,在这里分享一下。
首先,明确一下需求:
1.组件要基于react+antd+bpmnjs去开发;
2.组件需要发布到公司的npm仓库里,其他项目组通过依赖包形式加载,并且可以进行按需引入;
1.第一个坑(与其说坑,其实是我的无知)
刚开始的时候不知道,直接拉了一个react框架随便配置了一下就开始做了,后来经过公司的同事指导,说组件项目的框架和业务项目的框架是不一样的,这里是重点,我们写业务,可以直接cra或者用umi之类的框架,但是组件开发,请使用dumi之类的框架进行开发,这是第一个坑;
2.我组件开发的时候,使用了antd组件库,这里不像我们平时开发,需要引入antd样式,而是需要在.umirc.ts文件里配置styles属性,styles配置参考dumi文档;
3.组件开发结束,npm start正常,但是npm run build报错,
Error: default is not exported by node_modules eactindex.js, imported by srcFooindex.tsx
这里这个错,我这里是因为构建方式不对,系统默认rollup打包,我们需要在.fatherrc.ts文件里,把esm和cjs的构建方式改成babel;
4.package.json里面的main和module,默认的文件夹是dist,在我这里需要改成lib,这里具体问题具体对待;
5.最大的问题,以来下载下来调用的时候,因为我在组件项目里用到了less的模块化,调用的时候所有less样式均不生效,绝望,样式乱成一锅粥。解决方案,这里需要在项目的webpack配置里面去改了,配置less模块化;这里配置好了之后,如果less-loader版本过高,也会报一个错,我是把less-loader版本降到了7.3.0,降了版本之后还是会报一个错,inline javascript is not enabled. is it set in your options? 这个错,真的是,搞了半天,最后是配置了less 的javascriptEnabled属性才好的。这里less-loader 版本6以前和以后,javascriptEnabled属性配置方法不一样,至于怎么配,问度娘。
以上是我第一次进行组件开发遇到的一些问题。现在我刚写完一个组件demo,有一些问题我也没搞太懂,有什么不对的地方,欢迎批评指正。