ts搭建组件库

简介: 想要搭建组件库,必定要有好的模仿样例,比如element-ui。阅读源码就是最好的学习路径。本文主要内容:从零搭建自己的组件库,并进行组件测试。 涉及技术:vue + typeScript + scss + chai + mocha + karma。

一、骨架搭建


1.1 项目初始化


使用vue-cli3初始化项目,vue create dy-ui,安装如下图所示依赖,版本选择2.x。 初始化完成后,删除不必要的文件夹。修改目录如下:


.
├── src
│   ├── packages
│   │   ├── button (组件文件夹)
│   │   └── index.ts (组件注册入口)
│   ├── styles  (通用样式文件夹)
│   ├── types  (声明文件)
│   ├── App.vue
│   ├── main.ts
├── test
│   ├── unit
│   │   ├── button.spec.js (按钮测试文件)


根目录结构:


网络异常,图片无法展示
|


1.2 安装依赖资源


此项目所需依赖


"@babel/polyfill": "^7.11.5",
    "babel-loader": "^8.1.0",
    "core-js": "^3.6.5",
    "karma": "^5.2.3",
    "karma-chai": "^0.1.0",
    "karma-chrome-launcher": "^3.1.0",
    "karma-mocha": "^2.0.1",
    "karma-sourcemap-loader": "^0.3.8",
    "karma-spec-reporter": "^0.0.32",
    "karma-webpack": "^4.0.2",
    "mocha": "^8.1.3",
    "sass-resources-loader": "^2.1.1",
    "vue": "^2.6.11",
    "vue-class-component": "^7.2.3",
    "vue-property-decorator": "^8.4.2"
复制代码


1.3 引入scss全局变量


vue.config.js文件中,引入scss全局变量。


module.exports = {
chainWebpack: config => {
    config
      .entry('index')
      .add('@babel/polyfill')
      .end();
    const scssRes = config.module.rule('scss').oneOfs.store;
    scssRes.forEach(item => {
      item
      .use("sass-resource-loader")
        .loader('sass-resources-loader')
        .options({
          resources: './src/styles/_var.scss'
        }).end();
    })
  },
}


_var.scss文件中写入所需样式的全局变量。


二、搭建按钮组件


2.1 编写组件


以按钮组件为例,可到element官网上查看按钮组件所需要传入的参数。


2.2 注册组件


在src文件夹下index.ts,注册组件。

import DyButton from './button/button/Button.vue';
const install = (Vue: any) => {
  Vue.component(DyButton.name, DyButton);
}
export default {
  install,
};


除了以组件形式引入,还有可能会通过script标签的方式引入。全局直接通过script 引用的方式会默认调用install.


if (typeof window !== 'undefined' && (window as any).Vue) {
  install((window as any).Vue);
}


2.3 使用组件


在main.ts文件中,引入组件的入口文件,并使用。


import dyUi from './packages/index';
Vue.use(dyUi);


三、测试按钮组件


在unit文件夹下,新建button.spec.js测试文件。在package.json文件的script中添加测试执行语句。"test": "karma start",。 按需引入所需文件依赖,使用chai断言测试按钮功能是否成立。


import { shallowMount } from '@vue/test-utils'; // vue提供的快速测试的方法
import { expect } from 'chai';
import Button from '@/packages/button/button/Button.vue';
 it('测试button能否正常显示', () => {    // 测试当前组件运行在浏览器的情况
        const wrapper = shallowMount(Button, {
            slots: {
                default: 'dy-ui'
            }
        });
        expect(wrapper.text()).to.eq('dy-ui');
    });

运行yarn run test即可。


四、npm发布组件


打包文件:


"lib": "vue-cli-service build --target lib --name dying-ui ./src/packages/index.ts"


在此,需要注意的是打包路径是否正确。 之后,在npm官网上注册一个账号。在需要发布的项目中登录自己的npm账号。


网络异常,图片无法展示
|


登录成功后,将package.json文件中的private改为false,便可以发布npm包。若更新,则需要确认版本号不同,才可发布。


npm publish   // 发布命令

点击查看源码


作者:ClyingDeng

链接:https://juejin.cn/post/6888117281079951373

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

目录
相关文章
|
前端开发 JavaScript API
vue3-ts-storybook:理解storybook、实践 / 前端组件库
vue3-ts-storybook:理解storybook、实践 / 前端组件库
459 0
|
3月前
|
资源调度 JavaScript 编译器
Vite中如何更好的使用TS
【8月更文挑战第4天】Vite中如何更好的使用TS
262 4
Vite中如何更好的使用TS
ts的内置工具
ts的内置工具
99 0
|
JavaScript 前端开发
vue ts如何创建
vue ts如何创建
124 0
|
JavaScript 前端开发 中间件
从0开始搭建Vue3+Ts项目(1)
从0开始搭建Vue3+Ts项目(1)
|
JavaScript 前端开发
TS基础用法
TS基础用法
94 0
|
JSON 前端开发 JavaScript
规范(三):从 0 搭建 React+TS 项目
规范(三):从 0 搭建 React+TS 项目
规范(三):从 0 搭建 React+TS 项目
|
资源调度 JavaScript 前端开发
学习制作一个基于Vue3 + TS 的UI库
学习制作一个基于Vue3 + TS 的UI库
313 0
|
JavaScript
ts重点学习145-搭建vue3_ts文件
ts重点学习145-搭建vue3_ts文件
114 0
ts重点学习145-搭建vue3_ts文件
ts重点学习129-ts中模块的导入和导出
ts重点学习129-ts中模块的导入和导出
124 0
ts重点学习129-ts中模块的导入和导出