之所以写下这篇文章,是因为自己在使用father-build建设内部组件库的过程中,遇到了一些问题且难以找到相关文档,将自己的经验总结下来希望看到这篇文章的人能避开这些坑,更加顺利地搭建好自己的前端组件库。
package.json
其中,main指定了入口文件,module对应es module的输出,types对应你的typings文件,这样在组件在被使用的时候编辑器才能识别出你的组件类型声明
.fatherrc.js 配置father build打包方式, 具体详情可以参考 umijs/father
tsconfig.json typescript的配置文件,注意只有declaration设置为true才能生成.d.ts后缀的文件
接下来我们在components目录创建第一个自己的组件,下面是一个button的例子:
样式文件可以直接使用less编写
然后在入口文件index.ts将其导出,暴漏给外部使用。
使用文档的后缀名为".mdx", 语法与markdown类似,更多详情参考 docz 的文档
我们可以执行 yarn start ,来实时查看文档的效果。
现在命令行执行 yarn build 即可对组件库进行打包了,注意我们在.fatherrc中配置了esm和cjs两种打包方式,对应会生成 es 和 lib两个目录,其中 esm对应的是 es目录,cjs对应lib目录。
正常情况下,在的es和lib目录下应该已经为我们写的ts源码自动生成了“.d.ts”后缀的类型声明文件,如果没有生成,请仔细对比.fatherrc.js和tsconfig.json这两个配置文件,另外还要注意的是,如果我们基于antd封装业务组件库的话,不要在组件库中使用css module,否则也会造成无法自动产生类型声明文件的问题。
文章未能详尽部分,可以参考这个demo的github源码地址: https://github.com/xitengfei/xui-components , 有问题欢迎批评指正。
是javascript的超集。你可以先按写一个Typescript类型的文件,它的后缀名是.ts,然后再通过typescript的编译器,把.ts文件编译成.js文件。这个过程类似于你先写一个.less文件,然后再把这个.less文件编译成.css文件,然后在网页中使用。
这里有一个明显的问题:为什么要先写一个.ts文件,而不是直接去写javascript?我们额外付出的成本会有什么收益? 如果你用过less,那你肯定知道less和css之间的关系,那么你就会知道为什么要先写一个.ts,再转成.js。
前提:
因为你需要把.ts文件编译成.js,所以你先要把typescript到本地。
安装成功后,你可以输入如下命令查看当前typescript的版本。
你会得到一个index.js的文件。
内容如下:
在保持tsconfig.json文件处于编辑状态的情况下,按 ctrl+shift+b ,选择监听命令:
然后,你就可以编写.ts文件了,当你按下ctrl+s保存时,从.ts到.js的转换就自动完成了。
通常,在项目中引用js库分两种情况:一种是通过npm install ${name} --save 安装在node_modules目录下,package.json中的dependencies会配置正式环境所依赖的库。另外一种就是直接将.js文件放在src目录下,通过相对路径的方式直接引用。对于第一种情况:例如:weixin-js-sdk,在项目路径下,cnpm install weixin-js-sdk --save, 安装成功以后,查看package.json下的dependencies会增加一行weixin-js-sdk的版本信息。在使用的时候导入 import * as WeiXin from 'weixin-js-sdk'对于第二种情况:通过相对路径引用一个.js文件,那么需要在tsconfig.json中的compilerOptions中配置"allowJs": true,然后在使用的时候直接import,例如:import * as Swiper from './lib/swiper/swiper.min.js'上面两种情况是在没有.d.ts声明文件的情况下对于有些三方库,例如bootstrap,jquery等许多常用的都有声明文件,直接导入就可以,例如jquery:1. cnpm install jquery --save 安装jquery依赖包到node_modules目录下2. npm install @types/jquery --save-dev 安装类型描述文件到node_modules目录下,只安装到开发环境3. 修改angular-cli.json文件,增加styles(引入css的路径)和scripts(引入js的路径) "scripts": ["../node_modules/jquery/dist/jquery.js"]4. 修改tsconfig.app.json文件,添加到types数组 "types": ["jquery"],然后就可以使用$语法了