Vue3+element-plus+vite 组件的二次封装-- 组件库发布到npm

本文详细介绍了一个基于Vue3和Element Plus的组件库如何通过Vite进行开发,并最终发布到npm的过程。包括配置package.json、登录npm账号及发布npm包等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vue 笔记

本人是一个web前端开发工程师,主要是vue框架,整理了一些Vue常用的技术,一方面是分享,一方面是做总结,今后也会一直更新,有好建议的同学欢迎评论区分享 ;-)

序号文章
0组件库展示
1通过JSON配置–头部搜索条件的封装组件
2通过JSON配置–表单Table的封装组件
3页脚的封装组件
4通过JSON配置–Form表单的封装组件
5生成npm组件库
6发布到npm
7vitest为组件库添加单元测试
8vuepress为组件库生成文档
9通过github或者gitee pages将组件库文档发布到线上,免费!
10源码地址

在这里插入图片描述


组件库开发流程

Vue组件库专栏会按顺序执行一下流程,不断完善组件库开发流程

  1. Vue3+element-plus+vite 组件的二次封装,封装了头部的搜索条件栏,tabel栏,分页栏,form表单,都设置成了通过json可配置项,方便复用;
  2. 封装好了就开始打包,并且进行本地测试;
  3. 组件库发布到npm;
  4. 添加vitest单元测试框架;
  5. 添加vuepress文档。


发布npm包

文章按照组件库开发流程进行编写,其他内容可查看Vue组件库专栏 ,本章节开始发布npm包。


0. README.MD

编码自述文件…
该文件会显示在发布的npm包的首页,看本文章最后一节,会展示~


1. npm官网注册账号

npm官网:点击此处


2. 配置package.json

npm官网package.json配置:点击此处

用了以下配置,可以实现关联依赖包自动加载,不过如果项目原先就引入了其他版本的element-plus会是怎么样呢??? 这里还没遇到过,大大们可以评论区发言~~~

  1. name:是包名,不能重复,错了也会提醒你…
  2. version:版本号,确保每次上传都不一样,错了也会提醒你…
  3. files:别人npm i xxx(你的包名),别人能下载的文件,这边只给他dist,就是默认打包文件名
  4. keywords:关键字,随意~,方便别人看到你
  5. homepage:你的主页,后期用vuepress写好文档再改…
  6. repository:仓库,这边用的是git
  7. license:开源协议
  8. peerDependencies:声明同等依赖包,就是你想要别人用你的依赖包的时候,还需要下载额外的依赖包,可以这样配置,这边是对element-plus的二次封装,所以需要设置一下。npm i xxx 安装了你的包后,会自动下载element-plus,不用手动下载...
  9. browserslist:该项目对浏览器限制
  10. main:主入口文件
  11. exports:导出的包,这样,路人甲就可以在项目中import 这些文件了…
{
  "name": "penk-ui",
  "version": "1.0.2",
  "description": "对elementPlus进行二次封装的组件库",
  "files": [
    "dist"
  ],
  "keywords": [
    "vue",
    "element-plus",
    "ui组件库二次封装"
  ],
  "author": "penk",
  "email": "492934056@qq.com",
  "homepage": "https://gitee.com/penk666/penk-ui",
  "repository": {
    "type": "git",
    "url": "https://gitee.com/penk666/penk-ui.git"
  },
  "license": "ISC",
  "scripts": {
    "dev": "vite",
    "build": "run-p type-check build-only",
    "preview": "vite preview",
    "build-only": "vite build",
    "type-check": "vue-tsc --noEmit"
  },
  "peerDependencies": {
    "element-plus": "^2.2.26"
  },
  "peerDependenciesMeta":{
    "element-plus":{
      "optional": true
    }
  },
  "dependencies": {
    "element-plus": "^2.2.26",
    "vue": "^3.2.45"
  },
  "devDependencies": {
    "@types/node": "^18.11.12",
    "@vitejs/plugin-vue": "^4.0.0",
    "@vue/tsconfig": "^0.1.3",
    "less": "^4.1.3",
    "less-loader": "^11.1.0",
    "npm-run-all": "^4.1.5",
    "typescript": "~4.7.4",
    "vite": "^4.0.0",
    "vue-tsc": "^1.0.12"
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not ie <= 8"
  ],
  "main": "./dist/penk-ui.umd.js",
  "module": "./dist/penk-ui.es.js",
  "exports": {
    ".": {
      "import": "./dist/penk-ui.es.js",
      "require": "./dist/penk-ui.umd.js"
    },
    "./dist/style.css": "./dist/style.css"
  }
}

这边新建一个vue项目
在这里插入图片描述
直接安装依赖包

npm i penk-ui

在这里插入图片描述
自动下载了element-plus相关依赖包~~
测试了一下,可以直接在main.js 引入并且使用...


3. 切换到npm源

部分用户一些操作失败可能是源的问题,这边可以用nrm工具,实现快速切换源。
安装:点击此处

在这里插入图片描述


4. 登录npm

npm login

// 控制台会提示输入相关信息
Log in on https://registry.npmjs.org/
Username:  // 用户名
Password: // 密码
Email: (this IS public) // 邮箱
Enter one-time password: // 如果之前做过 双因素身份验证 (2FA),验证码
Logged in as xxx on https://registry.npmjs.org/.

5. 发布npm包

npm publish

6. 效果

penk-ui 包:点击此处

在这里插入图片描述

<think>好的,用户想要寻找关于在移动端使用Vue3ViteElement-Plus的集成方案或示例,特别是教程、示例、项目结构和配置方面的内容。我需要根据提供的引用信息来组织答案。 首先,引用[1]和[2]提到使用Vite搭建Vue3项目并集成Element-Plus,引用[3]介绍了一个后台集成方案。但用户需要的是移动端的方案,可能需要调整Element-Plus的配置以适应移动端,比如按需导入和自动导入,以减少体积。同时,可能还需要引入移动端适配的组件库,比如结合Vant或Element-Plus的移动版。 接下来,项目结构方面,Vite默认生成的结构已经适合,但可能需要添加移动端相关的目录,如views、components等。配置方面,需要设置视口、rem适配,可能使用postcss-pxtorem插件,并配置Vite的别名和环境变量。 另外,Element-Plus默认是针对桌面端的,移动端可能需要额外的样式调整,比如使用媒体查询或修改主题变量。或者,用户可能更倾向于使用专为移动端设计的库,比如Vant,但用户明确提到Element-Plus,所以需要说明如何适配。 还要考虑移动端的路由和状态管理,引用[2]和[3]提到了vue-router和vuex,可以沿用这些配置。同时,axios的封装和代理配置对于移动端开发也是必要的,引用[2]有相关部分。 最后,需要提醒用户Element-Plus的移动端适配限制,并建议可能的替代方案,同时提供示例代码和参考资料,确保回答结构清晰,步骤明确。</think>### Vue3 Vite Element-Plus 移动端集成方案 #### 一、项目创建与基础配置 1. **使用 Vite 创建 Vue3 项目** ```bash npm create vite@latest vue3-mobile-demo -- --template vue-ts ``` 项目结构默认包含: ``` ├─src/ │ ├─assets/ │ ├─components/ │ ├─App.vue │ └─main.ts ├─vite.config.ts └─tsconfig.json ``` 2. **集成 Element-Plus** 通过按需自动导入优化移动端体积(引用[2]): ```bash npm install element-plus @element-plus/icons-vue npm install -D unplugin-vue-components unplugin-auto-import ``` 修改 `vite.config.ts`: ```typescript import AutoImport from &#39;unplugin-auto-import/vite&#39; import Components from &#39;unplugin-vue-components/vite&#39; import { ElementPlusResolver } from &#39;unplugin-vue-components/resolvers&#39; export default defineConfig({ plugins: [ vue(), AutoImport({ resolvers: [ElementPlusResolver()], }), Components({ resolvers: [ElementPlusResolver({ importStyle: &#39;compressed&#39; })], // 压缩样式 }), ] }) ``` #### 二、移动端适配配置 1. **视口与 REM 适配** 安装 `postcss-pxtorem` 和 `amfe-flexible`: ```bash npm install postcss-pxtorem amfe-flexible -D ``` 在 `main.ts` 引入: ```typescript import &#39;amfe-flexible&#39; ``` 创建 `postcss.config.js`: ```javascript export default { plugins: { &#39;postcss-pxtorem&#39;: { rootValue: 37.5, // 1rem=37.5px(基于750px设计稿) propList: [&#39;*&#39;] } } } ``` 2. **移动端组件扩展** 推荐结合 `@element-plus/icons-vue` 优化图标加载: ```typescript // icons.ts import * as ElementPlusIconsVue from &#39;@element-plus/icons-vue&#39; export function registerIcons(app) { for (const [key, component] of Object.entries(ElementPlusIconsVue)) { app.component(key, component) } } ``` #### 三、典型移动端项目结构 ``` src/ ├─adapters/ # 设备适配层 ├─services/ # API接口 ├─stores/ # Pinia状态管理 ├─views/ # 页面组件 ├─utils/ # 工具函数 └─app.less # 全局样式 ``` #### 四、移动端特殊配置 1. **触控优化** 在 `vite.config.ts` 添加触屏事件 polyfill: ```typescript import legacy from &#39;@vitejs/plugin-legacy&#39; export default defineConfig({ plugins: [ legacy({ targets: [&#39;defaults&#39;, &#39;not IE 11&#39;] }) ] }) ``` 2. **环境变量配置** 创建 `.env.mobile` 文件: ```env VITE_API_BASE = &#39;/mobile-api&#39; VITE_DEBUG = false ``` #### 五、示例组件 ```vue <!-- MobileButton.vue --> <template> <el-button size="small" @touchstart="handlePress"> <template #icon><Search /></template> 搜索 </el-button> </template> <script setup> import { Search } from &#39;@element-plus/icons-vue&#39; const handlePress = () => { // 触控反馈逻辑 } </script> ``` **注意事项**: 1. Element-Plus 的桌面组件需通过 CSS 媒体查询适配移动端: ```less @media (max-width: 768px) { .el-dialog { width: 90%!important; } } ``` 2. 对于复杂移动场景,建议结合 `vant` 等移动优先组件库(需额外集成)[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Penk是个码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值