vue3+vite+npm组件的封装与发布

vue3+vite+npm组件的封装与发布

文中涉及到pnpm的命令,未安装pnpm,使用npm即可

一、搭建一个vite项目

pnpm create vue@latest

在这里插入图片描述
会生成初始化项目文件夹:
在这里插入图片描述

二、创建组件

用于测试,可以直接用初始化项目的组件进行封装
在这里插入图片描述
新建packages文件夹,将初始化项目src下的文件移动至packages文件夹中,并在packages文件夹中新建一个myTest.vue文件,用于引入初始化的一些vue文件,当作封装组件用于测试
在这里插入图片描述

三、修改组件代码,暴露方法并传值

修改myTest.vue文件代码,添加方法并暴露,同时添加组件传值,这样封装完成发布之后,可以自定义修改组件的值,并可根据自己的需求定义其它函数和操作

<script setup>
import HelloWorld from './/HelloWorld.vue'
import TheWelcome from './TheWelcome.vue'
import { ref } from 'vue'

// 定义父组件传过来的值,发布组件之后可以直接传值
defineProps({
  propMsg: {
    type: String,
    required: true
  }
})

const message = ref('南山彭于晏')

// 定义方法
const setMessage = (msg, time) => {
  setTimeout(() => {
    message.value = msg
  }, time);
}
// 并暴露出去,发布之后可以直接调用
defineExpose({
  setMessage
})
</script>

<template>
  <header>
    <img alt="Vue logo" class="logo" src="../assets/logo.svg" width="125" height="125" />

    <div class="wrapper">
      <HelloWorld :msg="message" />
      {{ propMsg }}
    </div>
  </header>

  <main>
    <TheWelcome />
  </main>
</template>

<style scoped>
header {
  line-height: 1.5;
}

.logo {
  display: block;
  margin: 0 auto 2rem;
}

@media (min-width: 1024px) {
  header {
    display: flex;
    place-items: center;
    padding-right: calc(var(--section-gap) / 2);
  }

  .logo {
    margin: 0 2rem 0 0;
  }

  header .wrapper {
    display: flex;
    place-items: flex-start;
    flex-wrap: wrap;
  }
}
</style>

四、添加组件入口文件

在packages文件夹下新建index.ts入口文件
在这里插入图片描述
引入myTest.vue组件并配置,然后暴露出去,这个就作为我们封装的组件,一会儿打包会从这个入口文件打包

import MyTest from './components/myTest.vue'

const myPlugin = {
  install(app) {
    // 配置此应用
    app.component('MyTest', MyTest)
  }
}

export default myPlugin

五、引入本地测试组件是否可用

在main.js文件中引入组件入口文件,并挂载
在这里插入图片描述
在App.vue文件中引用myTest组件
在这里插入图片描述
运行项目pnpm dev,测试页面,组件成功调用
在这里插入图片描述

六、配置打包脚本vite.config.js文件

因为我们最后发布的是打包后的文件,所以需要配置打包文件vite.config.js文件。项目初始化时会默认生成一个vite.config.js文件,在该文件中加入打包对象build即可
在这里插入图片描述
其中,./packages/index.ts就是刚刚建的组件入口文件,此时打包就是从该入口进行打包

import { fileURLToPath, URL } from 'node:url'
import path from 'path'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
  ],

  build: {
		outDir: "dist", //输出文件名称
		lib: {
			entry: path.resolve(__dirname, "./packages/index.ts"), //指定组件编译入口文件
			name: "vue-dialog",
			fileName: "vue-dialog",
		}, //库编译模式配置
		rollupOptions: {
			// 确保外部化处理那些你不想打包进库的依赖
			external: ["vue"],
			output: {
				// 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
				globals: {
					vue: "Vue",
				},
			},
		}, // rollup打包配置
	},

  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  }
})

七、打包组件并配置版本文件package.json

使用pnpm build对当前项目进行打包,打包成功生成dist文件夹(上一步在vite.config.js文件中配置的)
在这里插入图片描述
在dist文件夹下,使用npm init -y初始化并生成package.json文件,注意图中飘红部分即可
在这里插入图片描述

八、发布到npm

命令行运行npm login,没有npm账号先到npm官网注册
在这里插入图片描述
这里注意,如果注册账号之后报错:403 [FORBIDDEN] Public registration is not allowed
报错原因:NPM之前自己配置了淘宝镜像地址,需要配置回官网npm源地址
npm config set registry https://registry.npmmirror.com
然后再执行npm login即可,发布完组件之后记得改回!!!

登录成功之后,运行npm publish进行发布,发布成功会出现自己的组件和版本
在这里插入图片描述
也可在官网中进行搜索查看,确定发布成功,可以通过在package.json中配置的keywords进行搜索了
在这里插入图片描述

九、测试安装自己发布的组件并使用

先把npm镜像配回来:npm config set registry https://registry.npmmirror.com
然后安装组件:pnpm i lu-ui-dialog
在这里插入图片描述
由图可见,安装组件成功
在这里插入图片描述
在main.ts文件中引入组件并挂载
在这里插入图片描述

在App.vue文件中使用,并可调用配置组件时暴露的方法和传值
在这里插入图片描述
测试成功!
在这里插入图片描述

  • 27
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Vue 3中,可以使用Vite构建工具来快速搭建项目。下面是一个简单的示例,演示如何使用Vite和Axios进行二次封装。 首先,确保已经安装了Vite和Axios。 1. 创建一个新的Vue项目: ```bash # 使用Vite创建新项目 npm init vite my-project cd my-project npm install ``` 2. 安装Axios: ```bash npm install axios ``` 3. 创建一个`api`文件夹,并在其中创建一个`request.js`文件,用于封装Axios的请求逻辑: ```javascript import axios from 'axios' // 创建自定义Axios实例 const instance = axios.create({ baseURL: 'http://api.example.com', // 设置接口基本路径 timeout: 5000 // 设置请求超时时间 }) // 请求拦截器 instance.interceptors.request.use(config => { // 在发送请求之前做一些处理,例如添加认证信息等 return config }, error => { return Promise.reject(error) }) // 响应拦截器 instance.interceptors.response.use(response => { // 在接收到响应数据之前做一些处理,例如统一处理错误码等 return response.data }, error => { return Promise.reject(error) }) export default instance ``` 4. 在Vue组件中使用封装好的Axios实例: ```javascript import request from '@/api/request' export default { methods: { fetchData() { request.get('/data') .then(response => { // 处理返回的数据 }) .catch(error => { // 处理请求错误 }) } } } ``` 使用以上方法,我们可以将Axios进行二次封装,在Vue项目中更方便地使用。你还可以根据实际需求,进一步扩展封装的功能,例如处理全局错误、统一处理Loading状态等。 **

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值