首页 前端知识 封装vue3组件库发布到npm

封装vue3组件库发布到npm

2024-08-04 22:08:49 前端知识 前端哥 884 88 我要收藏

为什么要封装组件

  • 避免重复工作量(模块化)
  • 代码连加清晰(抽象化)
  • 超大型企业级应用(可扩展性)

准备工作

  • 知识库 基础HTML,javaScript,Vue基础
  • 项目准备 目录结构
  • 组件封装 实际应用组件
  • 项目npm发布

安装

平时都是vue cli这次以一种新的方式来搭建,先打开vite官网 搭建第一个 Vite 项目

npm init vite@latest
复制

安装过程中提示选择vue、JavaScript
在这里插入图片描述

按照提示安装、运行,这样就一个项目安装成型了。

开始创建组件

  • vue3逻辑复用之插件运用
    使用插件 (Plugins) 将多个组件串连起来,方便多个组件引入使用

整理代码及插件 (Plugins) 使用
目录如下:

之前初始创建的那些多余代码及文件都删除,只保留核心目录及代码
创建F:\projects\vue3-components\packages\components\Icon.vue

<template>
<div>
这是一个测试文件
</div>
</template>
复制

创建F:\projects\vue3-components\packages\index.js

import Icon from './components/Icon.vue'
const myPlugin = {
install(app) {
// 配置此应用
app.component('Icon', Icon)
}
}
export default myPlugin
复制

F:\projects\vue3-components\src\App.vue

<template>
<div>
<Icon/>
</div>
</template>
复制

F:\projects\vue3-components\src\main.js

import {createApp} from 'vue'
import App from './App.vue'
const app = createApp(App)
import myPlugin from "../packages/index.js";
app.use(myPlugin)
app.mount('#app')
复制

改造icon文件,变成可复用的icon组件

ps:这个可根据自己的业务来做组件,下面做的步骤是针对icon封装记录的代码,不需要的可忽略掉
阿里巴巴iconfont symbol来实现
在这里插入图片描述

点击复制代码后,在项目根目录下F:\projects\vue3-components\index.html增加

<script src="//at.alicdn.com/t/c/font_4476687_545beinp8sd.js"></script>
复制

在这里插入图片描述

在引入fonticon里查看使用帮助一步步操作

修改F:\projects\vue3-components\src\App.vue

<template>
<div>
<Icon iconName="icon-a-MATE_huaban1fuben112" @handleClick="handleClick"/>
</div>
</template>
<script>
import {defineComponent} from 'vue';
export default defineComponent({
setup() {
const handleClick = () => {
alert('我被点击了')
};
return {
handleClick
}
}
})
</script>
复制

修改F:\projects\vue3-components\packages\components\Icon.vue

<template>
<div>
<svg :class="svgClass" aria-hidden="true" @click="handleClick">
<use :xlink:href="iconName"></use>
</svg>
</div>
</template>
<script>
import {defineComponent, ref} from "vue";
//icon的一个hooks
function useIcon(props, context) {
const svgClass = ref(`icon ${props.svgClass}`);
const iconName = ref(`#${props.iconName}`);
const handleClick = () => {
context.emit('handleClick')
}
return {
svgClass,
iconName,
handleClick
}
}
export default defineComponent({
props: {
svgClass: {
type: String,
default: ''
},
iconName: {
type: String,
required: true,//必传
}
},
setup(props, context) {
const useIconData = useIcon(props, context)
return {
...useIconData
}
}
})
</script>
<style scoped>
.icon {
width: 1em;
height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
cursor: pointer;
}
</style>
复制

ps:组件继承

  • extends

打包脚本

创建F:\projects\vue3-components\build\lib.config.js

import {defineConfig} from "vite";
import {resolve} from 'path';
import vue from '@vitejs/plugin-vue';
export default defineConfig({
build: {
outDir: 'dist',
lib: {
entry: resolve(__dirname, "../packages/index.js"),
name: 'my-components',
fileName: (format) => `my-components-${format}.js`//umd es
},
rollupOptions: { //打包
external: ['vue'],//不打包项
output: {
//UMD模式下为那些外部化的依赖提供一个全局变量
globals: {
vue: 'Vue'
}
}
}
},
plugins: [
vue({
include: [/\.vue$/], //必须打包 包含.vue文件
})
]
})
复制

发布npm包配置

修改F:\projects\vue3-components\package.json

在这里插入图片描述

发布npm

可参考 公用工具类js发布到npm 引入到vue 发布到npm

应用到项目

安装组件库

npm install vue3-component-examples
复制

全局引用
项目根目录main.js里

import componentExamples from 'vue3-component-examples'
import 'vue3-component-examples/dist/style.css'; // 引入公共样式 这个是在组件打包库里生成的样式文件
复制
app.use(componentExamples);
复制
转载请注明出处或者链接地址:https://www.qianduange.cn//article/14795.html
标签
评论
还可以输入200
共0条数据,当前/页
发布的文章

安装Nodejs后,npm无法使用

2024-11-30 11:11:38

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!