通过gulp+rollup从零到一搭建前端组件库

核心要点

  • 通过 webpack 搭建运行环境
  • 通过 gulp 执行编译流程
  • 通过 rollup 编译组件代码
  • 编写 组件
  • 测试 组件
  • 打包 编译组件
  • 上传 npm

1、通过 webpack 搭建运行环境

这里主要是创建一个可以运行的测试的组件的环境,全局安装vue-cli脚手架,并初始化项目

vue create mtt-component

修改文件夹名称和基本配置的修改

在这里插入图片描述

2、通过 gulp 执行编译流程

安装gulp执行流程中所需要用到的插件

npm install -D  gulp@4.0.2 fs-extra@11.1.0 cross-spawn@7.0.3 sass gulp-sass gulp-postcss autoprefixer@9.8.6

在根目录的build文件底下创建一个gulpfile.js的文件

//gulpfile.js
const gulp = require('gulp');//执行流程
const fs = require('fs-extra');//该插件主要用于操作文件
const spawn = require('cross-spawn');//该插件主要用于运行终端命名
const sass = require('gulp-sass')(require('sass'));//该插件用于将sass编译成css
const postcss = require('gulp-postcss');//该插件处理css
const autoprefixer = require('autoprefixer');//该插件为css自动加前缀
const {pathDist, pathPackagesStyles} = require('./path.config.js');//公共路径配置//清空组件文件
gulp.task('cleanComponents', done => {fs.removeSync(`${pathDist}/cjs`);fs.removeSync(`${pathDist}/es`);fs.removeSync(`${pathDist}/umd`);fs.removeSync(`${pathDist}/styles`);done();
});//打包编译css
gulp.task('buildStyles', done => {gulp.src(`${pathPackagesStyles}/**/*.scss`).pipe(sass().on('error', sass.logError)).pipe(postcss([autoprefixer({overrideBrowserslist: ['last 2 version','>1%','ios 7']})])).pipe(gulp.dest(`${pathDist}/styles`));done();
});//构建组件
gulp.task('buildComponents', done => {spawn.sync('npm run build:rollup', [], {stdio: 'inherit'});done();
});//gulp执行流程
gulp.task('default', gulp.series(['cleanComponents', 'buildStyles', 'buildComponents'], done => {console.log('编译成功');done();
}));

3、通过 rollup 编译组件代码

安装rollup编译流程中所需要用到的插件

npm install -D  @rollup/plugin-babel@6.0.3 rollup-plugin-vue@5.1.9 @rollup/plugin-node-resolve@15.0.1 @rollup/plugin-commonjs@24.0.1 @rollup/plugin-json@6.0.0 @rollup/plugin-terser@0.4.0  rollup-plugin-postcss@4.0.2

在根目录的build文件底下创建一个rollup.config.js的文件

// rollup.config.js
const babel = require('@rollup/plugin-babel');//在rollup里应用 babel 解析ES6的桥梁
const vue = require('rollup-plugin-vue');//用于处理 .vue文件,针对vue2的文件
const resolve = require('@rollup/plugin-node-resolve');//让rollup可以找到node环境的其他依赖
const commonjs = require('@rollup/plugin-commonjs');//将commonJS代码转译成 esmodule的代码
const json = require('@rollup/plugin-json');//它允许 Rollup 从 JSON 文件导入数据
const terser = require('@rollup/plugin-terser');//压缩代码
const postcss = require('rollup-plugin-postcss');//处理css,它支持css文件的加载、css加前缀、css压缩、对scss/less的支持等等
const postcssPlugin = require('./postcss.config.js');//postcss配置文件
const {getPackageFiles} = require('./utils.js');//获得所有组件路径及名称//rollup插件基本配置
const getConfigBase = function () {return {plugins: [resolve(),vue({css: true,compileTemplate: true,style: {postcssPlugins: postcssPlugin}}),json(),commonjs(),babel({babelHelpers: 'bundled',exclude: 'node_modules/**',extensions: ['.mjs', '.js', '.json', '.ts'],presets: [['@babel/preset-env',{'targets': {'ie': '8'}}]]}),postcss({extensions: ['.css', '.scss'],extract: true,plugins: postcssPlugin}),terser({format: {comments: RegExp('eslint-disable')}})],external: ['vue',]};
};//rollup文件完整配置
const getConfigArray = (function () {let componentsObject = getPackageFiles();let formatArray = ['es', 'cjs', 'umd'];let filesArray = formatArray.reduce((preArr, format) => {let resArr = [];let data = getConfigBase();data.input = {};data.output = {banner: '/* eslint-disable */ ',dir: `./dist/${format}`,format: format,name: 'mtt',globals: {vue: 'Vue' // 告诉rollup全局变量Vue即是vue}};for (let x of componentsObject) {let item = {};item[x.inputName] = x.inputPath;data.input = {...data.input,...item};if (format === 'umd') {break;}}resArr.push(data);return preArr.concat(resArr);}, []);return filesArray;
})();module.exports = getConfigArray;

4、编写组件

现在chatgpt这么火,借助chatgpt编写了个简单的button组件

在这里插入图片描述
然后,在button文件夹下,建立一个index.js,用于导出单个组件

import button from './button.vue'// 为组件提供 install 安装方法,供按需引入
button.install = function (Vue) {Vue.component(button.name, button)
}// 默认导出组件
export default button

然后,在components的根目录下,建立一个index.js,该文件用于导出所有组件

// 导入按钮
import MttButton from './button'// 存储组件列表
const components = [MttButton
]// 定义 install 方法,接收 Vue 作为参数。如果使用 use 注册插件,则所有的组件都将被注册
const install = function (Vue) {// 判断是否安装if (install.installed) return// 遍历注册全局组件components.map(component => Vue.component(component.name, component))
}// 判断是否是直接引入文件
if (typeof window !== 'undefined' && window.Vue) {install(window.Vue)
}export default {// 导出的对象必须具有 install,才能被 Vue.use() 方法安装install,// 以下是具体的组件列表MttButton
}

5、测试组件

在业务端引入组件

在这里插入图片描述

运行到浏览器,运行成功了,得出了预期的结果

在这里插入图片描述

6、打包编译组件

终端运行打包命令

 npm run build

打包完后,得到dist目录下的打包后的代码,为了方便测试,我们先不上传到npm,而是通过npm link软连接的方式,引入组件再次测试,得到一样的结果

在这里插入图片描述

7、上传 npm

配置 package.json,通过npm publish即可上传至npm,要注意的事,上传npm时,不要用淘宝镜像,切换npm自身的镜像,否则会有10分钟的延迟

在这里插入图片描述

到npm官网查看下,发现我们的发布的组件库已经成功了

在这里插入图片描述

8、附加说明

  • 该组件库可以支持全量引入和按需引入,关于按需引入方面,可以参考 element的按需引入方式
  • 目前该组件库的基础架构是针对vue2的,若想针对vue3进行开发,只需要改变rollup的部分插件即可,不过建议可以和vite架构结合,关于vite版本的可以看我另外一篇博客,通过gulp+vite搭建vue3组件库
  • 文章中的代码地址在这里

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

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

相关文章

Nuxt重构的填坑之路

我的个人网站是用vuecli写的,SEO不忍直视。于是用Nuxt重构了代码,过程中踩了无数坑,记录如下 一:body样式不生效 正常的body样式设置不能生效,需要在nuxt.config.js中配置 1、设置bodyAttrs的class属性,该…

【ProNoC】Chap.1 ProNoC生成2x2的mesh型的4核片上网络系统;实现NoC的RTL设计

【ProNoC】Chap.1 ProNoC生成2x2的mesh型的4核片上网络系统;实现NoC的RTL设计 0. NoC多核片上网络生成器ProNoCProNoC的功能实现 1. 生成一个叫做Mor1kx SoC的单个Tile(包含NI网络接口)1.1 打开ProNoC用于生成Tile的GUI界面1.2 为Tile添加时钟…

【AI绘图学习笔记】transformer

台大李宏毅21年机器学习课程 self-attention和transformer 文章目录 Seq2seq实现原理EncoderDecoderAutoregressive自回归解码器Non-Autoregressive非自回归解码器Corss-attention 总结TrainingtrickCopy MechanismGuided AttentionBeam Search强化学习(Reinforceme…

MATLAB转C

1、先写好一个 函数调用。点击应用程序----MATLAB coder 打开一个对话框,确定C语言代码的工程名。 2、添加函数文件 3、添加文件后,单击变量,选择变量类型和矩阵大小。注意,如果选择的不是double型的数据类型,MATLAB…

Qt功能优化:Qt语音助手

Qt功能优化:Qt语音助手 文章目录 Qt功能优化:Qt语音助手一、效果图二、使用步骤1. .pro部分2. .h部分3. .cpp部分总结一、效果图 点击界面右上方类似于耳机的按钮,即可召唤出语音助手,来为您讲解我们的项目。如下图所示: 二、使用步骤 1. .pro部分 代码如下: QT …

【Chisel学习】设计n位超前进位加法器生成器(Carry-Lookahead Adder Generator)

Chisel学习——设计n位超前进位加法器生成器(Carry-Lookahead Adder Generator) 文章目录 Chisel学习——设计n位超前进位加法器生成器(Carry-Lookahead Adder Generator)一,项目简介二,理论基础2.1 Chisel2.1 硬件生成器&#xf…

OpenAI GPT-3模型详解

OpenAI GPT-3模型详解 针对文本生成和代码生成这两大类场景,OpenAPI分别提供了GPT-3和Codex模型, 模型描述GPT-3一组能够理解和生成自然语言的模型Codex一组可以理解和生成代码的模型,包括将自然语言转换为代码 本文将为大家详细介绍这两个…

Vue3通透教程【十七】Vite构建TS版本Vue项目

文章目录 🌟 写在前面🌟 创建TS版本的Vue3项目🌟 插件安装🌟 写在最后 🌟 写在前面 专栏介绍: 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章,应粉丝要求开始更新 Vue3 的相关技术文章&#…

用 ChatGPT 重构工作流程

如果你第一次听说 ChatGPT,那你要反思一下自己的信息获取渠道是不是出了问题,作为 AI 时代最强代表,你一定要亲自去体验一下,而不是道听途说。 公司需要降本增效,个体也一样,在工作中畅快应用 AI 来帮助自己…

Qt:可视化UI设计

1、创建项目&修改组件的对象名字和显示文本内容 创建一个 Widget Application 项目类 QDialog,在创建窗体时选择基类 QDialog,生成的类命名为 QWDialog,并选择生成窗体。 在界面设计时,对需要访问的组件修改其objectName&am…

【Qt设计开发】GUI界面设计开发

文章目录 一、Qt简介和下载安装二、Qt入门2.1 创建第一个项目2.2 快捷键和命名规范2.3 Qt项目和VS2022项目相互转换 三、Qt基础3.1 Qt对象树和窗口坐标系概念3.2 QPushButton3.3 信号和槽(signals and slots)3.3.1 pushbutton关闭窗口3.3.2 自定义信号和槽 3.4 Lambda表达式3.5…

【饭谈】ChatGpt如果让软件ui都消失的话,那ui自动化测试该何去何从?

“未来的软件长什么样?” 一位妹子产品经理问我:“你说说未来的软件ui是什么样的?听到这个问题我先是诧异了一下,随即陷入了沉思。” 我看着眼前的产品经理,她是一位比较年轻干练的女强人类型,1.65的身材…

chatgpt赋能python:Python如何设计UI:最佳实践和关键洞察

Python如何设计UI:最佳实践和关键洞察 作为一种支持多种编程范式和用途的高级语言,Python已经成为了许多技术创造者和创业者的首选工具之一。但是,Python最初并不是为了动态用户界面(Dynamic User Interface,简称UI&a…

基于Qt的ui图形化界面进行的界面设计

qt初学者往往会发现这样的一个问题——无论是我买的相关的书,还是网上博客的内容,基本全都是利用纯代码的形式来进行界面设计的。而初学者对各种控件的代码实现并不熟悉,往往在这里耗费大量时间。故本篇文章介绍了通过ui图形化界面进行设计的…

职场神器:只需三分钟,AI工具让我变成插画师

绘画技能 一般来说,搞技术的,写文章的,在绘画的这棵技能树上的加点往往都是零。 而且绘画和音乐这些技能往往是需要一定天赋的,它不像写代码和开挖机,后两者往往经过培训以后人人都能学会,而前两者没有一…

设计师与 ChatGPT 应该如何共处?

ChatGPT 的火爆,导致众多设计师开始忧心忡忡! ChatGPT那么厉害,是不是设计师要被取代了??? ChatGPT以及很多 AI 生成插画和图片的工具和软件,不仅为我们带来了惊喜,也让我们感受到了不少担忧!…

美国人真的开始害怕AI了

ChatGPT 发布半年后,人类终于意识到,世界已经彻底改变了。 这变化,比以往任何时候都更迅猛,更让人措手不及。 劳动者,学者,技术专家,NGO,政府,人们不得不作出应对。 这是…

三星引入ChatGPT半个月泄密3次;MidJourney V5相机镜头完整参数列表;万字长文,拆解投身大模型3个本质问题 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 『三星引入 ChatGPT 半个月泄密三次』数据安全是个大问题啊! 据韩国媒体报道,三星电子 (Samsung Electronics)…

2021高考成绩查询理综各科得分,2021河南高考总分及各科分数 满分分数是多少

河南高考试卷总分为750分,其中语文科目满分150分;数学科目满分150分;英语科目满分150分;文综和理综各自均为300分。 2021河南高考各科及满分分数设置考试科目顺序满分分数高考总分 语文150分750分 文数/理数150分 文综/理综300分 …

ChatGPT写的2023全国高考作文,什么水平?

2023年全国统一高考,1291万考生赶赴考场,高考语文科目考试结束后,备受关注的各地高考作文题目也已经新鲜出炉! 随后,网上也掀起了用Chat-GPT写高考作文的热风,小编用全国甲卷做了尝试,以下是自…