组件库 组件工程化管理探索

文章目录

  • 组件库单组件版本控制
    • 打包组件
    • 在用户项目中注册组件
      • 项目可以直接在模版中使用引入的打包后的组件原因
    • 每个组件独立的 package.json 文件的单组件包管理
    • 使用 lerna 或 yarn workspaces 进行统一管理
    • 添加组件文档、测试
    • 通过 CI/CD 流水线自动化这个流程
  • 国际化
  • 换肤
  • 组件库不同版本维护
  • 打包不同 css 类型

组件库单组件版本控制

打包组件

const path = require('path');
const { VueLoaderPlugin } = require('vue-loader');module.exports = (env) => {const componentName = env.COMPONENT; // 获取组件名称return {mode: 'production',entry: `./components/${componentName}/index.js`,output: {path: path.resolve(__dirname, `dist/${componentName}`),filename: `${componentName}.js`,library: componentName,libraryTarget: 'umd',umdNamedDefine: true,globalObject: 'this'},resolve: {extensions: ['.js', '.vue']},module: {rules: [{test: /\.vue$/,loader: 'vue-loader'},{test: /\.js$/,loader: 'babel-loader',exclude: /node_modules/},{test: /\.css$/,use: ['style-loader', 'css-loader']}]},plugins: [new VueLoaderPlugin()],externals: {vue: {root: 'Vue',commonjs: 'vue',commonjs2: 'vue',amd: 'vue'}}};
};

在用户项目中注册组件

import { createApp } from 'vue';
import App from './App.vue';
import { install as Button } from '@your-library/button';const app = createApp(App);
app.use(Button); // 注册全局组件
app.mount('#app');

项目可以直接在模版中使用引入的打包后的组件原因

  • 打包后的组件实际上已经是一个渲染函数了,然后进行了预先注册,当模版再次遇到打包后的组件时,因为已经有了 render 渲染函数,所以运行时会跳过打包编译过程
(function (global, factory) {if (typeof module === 'object' && typeof module.exports === 'object') {module.exports = factory();} else if (typeof define === 'function' && define.amd) {define([], factory);} else {(global.VueComponent = factory());}
}(this, (function () {'use strict';var Button = {name: 'Button',render: function (h) {return h('button', [this.$slots.default()]);}};Button.install = function (app) {app.component(Button.name, Button);};return Button;})));

每个组件独立的 package.json 文件的单组件包管理

/packages/button/srcButton.vuepackage.jsonindex.js/input/srcInput.vuepackage.jsonindex.js...
package.json
lerna.json

使用 lerna 或 yarn workspaces 进行统一管理

  • 根目录下有一个 package.json 文件,每个组件的依赖和脚本在根目录统一管理

添加组件文档、测试

通过 CI/CD 流水线自动化这个流程

国际化

  • 各种 i18 方案

换肤

  • 主题 css 变量
  • 动态 link 样式表

组件库不同版本维护

  • 使用 lerna 或 yarn workspaces 进行统一管理

打包不同 css 类型

{test: /\.css$/,use: ['style-loader', 'css-loader']
},
{test: /\.less$/,use: ['style-loader', 'css-loader', 'less-loader']
},
{test: /\.scss$/,use: ['style-loader', 'css-loader', 'sass-loader']
},
{test: /\.unocss$/,use: ['style-loader', 'css-loader', 'postcss-loader', {loader: '@unocss/webpack',options: {}}]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

旅美钢琴学者何超东北巡演启幕,精湛演绎肖邦全套作品

7月26日、28日,旅美钢琴学者何超在长春和哈尔滨两地成功开启了他的暑期钢琴独奏音乐会东北巡演。在这两场演出中,何超为观众带来了全套肖邦的「谐谑曲」与「叙事曲」,以娴熟的技巧、惊人的记忆力和体力,将八首曲目一气呵成&#x…

一体化政务大数据体系-数据目录系统

1、系统目标 实现数据目录一体化,按照应编尽编的原则,推动各地区各部门建立全量覆盖、互联互通的高质量一体化政务数据目录。建立数据目录系统与部门目录、地区目录实时同步更新机制,实现政务数据“一本账”管理。 2、需求描述 一是实现政…

这可能是开源界最好用的能源管理系统

💂 个人网站: IT知识小屋🤟 版权: 本文由【IT学习日记】原创、在CSDN首发、需要转载请联系博主💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 文章目录 写在前面项目简介项目特点项目架构模块展示项目获取 写在前面 大…

buu做题(9)

[MRCTF2020]PYWebsite 有个二维码 扫了一下啊二维码 function enc(code){hash hex_md5(code);return hash;}function validate(){var code document.getElementById("vcode").value;if (code ! ""){if(hex_md5(code) "0cd4da0223c0b280829dc3ea4…

Java之归并排序

归并排序 归并排序(Merge Sort)算法,使用的是分治思想。分治,顾名思义,就是分而治之,将一个大问题分解成小的子问题来解决。小的子问题解决了,大问题也就解决了。 核心源码: mergeSort(m->n) merge(mergeSort(m-&g…

Java8新特性(一) Lambda表达式与函数式接口

Java8新特性(一) Lambda表达式与函数式接口 一. 基本概念 Lambda表达式是Java 8中引入的一个重要的新特性,该表达式提出了一种新的语法规则,用于对某些(函数式接口)匿名内部类的书写方式进行简化。除此之外…

什么是等保测评?

信息安全等级保护测评,简称等保测评,是根据我国《信息安全等级保护管理办法》的规定,对国家重要信息系统进行的安全评估制度。等保测评的频率、必要性以及在实际操作中的常见误区,是企业和机构在进行等保测评时需要了解的重要内容…

智能写作分享

智能写作技术路线 ​ 在大模型的现有能力框架内,其对于处理长文档级别的智能写作任务存在一定的局限性。针对这一问题,本文深入探讨了长文档智能写作这一应用场景,并在此基础上,提出了一套切实可行的技术解决方案。该方案旨在弥补…

ts踩坑!使用可选链 ?.处理可能遇到的 undefined 或 null 值的情况,但是仍然收到一个关于可能为 undefined 的警告!

在 TypeScript 中,当你使用可选链(Optional Chaining)?. 时,你其实已经处理了可能遇到的 undefined 或 null 值的情况。但是,如果你仍然收到一个关于可能为 undefined 的警告,这可能是因为 TypeScript 的类…

关于js函数参数是否会实时更新的问题

遇到一个小问题 export function test001(value, callback) {setTimeout(() > {if (value undefined) {test001(value, callback)} else {callback()}}, 100) }// 调用处 // 要测试的变量 param01 test001(param01, () > {console.log(值不为空啦) }) 这个变量param01…

指针的意义

/指针------------------------------------------------------------------------------------------ // 1,指针是---------- // 通过它能找到以它为地址的内存单元 //int main() //{ // int a 10;//开辟一块空间 // int* p &a;//将变量a的地址取出&…

web自动化6-pytest③实践测试用例-回归用例web自动化

# -*- coding: utf-8 -*- """ lemut_select - 业务受理 Author: duxiaowei Date: 2024/7/17 """ import timeimport allure import pytest from selenium.webdriver.common.by import By# 业务受理 allure.feature("业务受理") class …

Unity Apple Vision Pro 开发:如何把 PolySpatial 和 Play To Device 的版本从 1.2.3 升级为 1.3.1

XR 开发社区: SpatialXR社区:完整课程、项目下载、项目孵化宣发、答疑、投融资、专属圈子 📕教程说明 本教程将介绍如何把 Unity 的 PolySpatial 和 Play To Device 版本从 1.2.3 升级为 1.3.1。 📕Play To Device 软件升级 ht…

使用 Visual Studio 2022 自带的 cl.exe 编译 tensorRT自带测试样例 sampleOnnxMNIST

1. 新建任意文件夹,将 D:\install\tensorRT\TensorRT-8.6.1.6\samples\sampleOnnxMNIST 下面的 sampleOnnxMNIST.cpp 文件复制进来,同时 D:\install\tensorRT\TensorRT-8.6.1.6\samples\sampleOnnxMNIST 下面的 sample_onnx_mnist.vcxproj 中的内容&…

Java核心 - 内部类详解

作者:逍遥Sean 简介:一个主修Java的Web网站\游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有疑问和建议,请私信或评论留言! 前言 在Java编程中&a…

vite5-macos仿macOS网页osx管理系统|vue3+arcoDesign桌面os

基于vite5.xvue3arco-design原创自研网页版os管理框架ViteWebOS。 使用最新前端技术vite5vue3pinia2arcoDesignsortablejsecharts搭建网页pc版桌面os式后台管理系统解决方案。支持自定义桌面栅格布局引擎、可拖拽桌面图标、多屏分页管理、自定义桌面壁纸主题、毛玻璃虚化背景等…

学Java一篇文章就够了(手把手教你入门)

第11章 枚举&注解&内部类 一、枚举 概念 枚举类型是Java 5中新增特性的⼀部分,它是⼀种特殊的数据类型,之所以特殊是因为它既是⼀种类 (class)类型却⼜⽐类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性、安…

51单片机----开发工具介绍及软件安装

目录 一、硬件工具 二、软件工具 三、软件安装 四、总结 51单片机作为经典的入门级微控制器,因其易学易用、性价比高的特点,被广泛应用于各种电子产品中。想要玩转51单片机,首先需要了解其开发工具和软件安装方法。本文将从硬件和软件两方…

JCR一区级 | Matlab实现TTAO-Transformer-LSTM多变量回归预测

JCR一区级 | Matlab实现TTAO-Transformer-LSTM多变量回归预测 目录 JCR一区级 | Matlab实现TTAO-Transformer-LSTM多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【JCR一区级】Matlab实现TTAO-Transformer-LSTM多变量回归预测,三角拓扑聚合…

C语言 #具有展开功能的排雷游戏

文章目录 前言 一、整个排雷游戏的思维梳理 二、整体代码分布布局 三、游戏主体逻辑实现--test.c 四、整个游戏头文件的引用以及函数的声明-- game.h 五、游戏功能的具体实现 -- game.c 六、老六版本 总结 前言 路漫漫其修远兮,吾将上下而求索。 一、整个排…