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

来源:稀土掘金

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

目录
相关文章
|
9月前
|
存储 编译器 程序员
C语言基础——C语言常见概念
C语言基础——C语言常见概念
|
9月前
hexo部署(hexo d)报错 FATAL { err: Error: Spawn failed
hexo部署(hexo d)报错 FATAL { err: Error: Spawn failed
222 0
|
9月前
Vue3的reactive、ref、toRef、toRefs用法以及区别
Vue3的reactive、ref、toRef、toRefs用法以及区别
142 0
多阶哈希
多阶哈希
175 0
|
前端开发 索引
Canvas画布撤销与前进实现方案
Canvas画布撤销与前进实现方案
458 0
Canvas画布撤销与前进实现方案
从0搭建vue3组件库:Link组件
从0搭建vue3组件库:Link组件
548 0
|
前端开发 测试技术
从0搭建Vue3组件库(一): 开篇
从0搭建Vue3组件库(一): 开篇
415 0
|
前端开发 JavaScript
从0搭建Vue3组件库(五): 如何使用Vite打包组件库
从0搭建Vue3组件库(五): 如何使用Vite打包组件库
803 0
|
Java 开发工具 git
如何制作一个可以自动更新的Github个人主页
Github近期上线一个新的功能,就是你在自己账号下创建一个和自己用户名同名的仓库,并在仓库下创建一个README.md文件,这个文件就会被展示在你的Github个人主页。源于markdown的强大描述能力,你可以在你的Github首页展示各种各样的信息,甚至有人直接将自己个人简历挂上面,极大丰富了Github的可玩性。
145 0
|
机器学习/深度学习 TensorFlow 算法框架/工具
从零开始,搭建一个自己的神经网络
从零开始,搭建一个自己的神经网络
474 1

热门文章

最新文章