热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

解决一个蛋疼问题:如何编写一个vue3插件:vue实现手册

本文主要介绍关于javascript,vue.js,前端,自动化测试,程序人生的知识点,对【解决一个蛋疼问题:如何编写一个vue3插件】和【vue实现手册】有兴趣的朋友可以看下由【爱吃香菜】投稿

本文主要介绍关于Javascript,vue.js,前端,自动化测试,程序人生的知识点,对【解决一个蛋疼问题:如何编写一个 vue3插件】和【vue 实现手册】有兴趣的朋友可以看下由【爱吃 香菜】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的自动化测试,软件测试,程序人生相关技术问题。

vue 实现手册

1 如何编写一个vue3插件

最近在使用vue编写前端项目时遇到一个蛋疼的问题。因为在项目中需要使用代码编辑框,所以使用了ace editor插件。但是突然插件中的cdn被墙,导致组件不能正确运行。

上网查了查,目前最流行的js编辑器就是ace和codemirror。特别是codemirror6,以模块的方式编写,可以直接在vue3项目中使用。为了方便使用决定封装一个插件,然后通过npm install的方式引入。

2 什么是插件

vue中的插件是自包含代码,通常是向Vue添加全局级功能。比如,添加一个全局函数,一个全局组件。插件可以是一个公开 install 方法的 object,也可以是 function。

所以,接下来我这里要开发的是一个组件。

3 如何编写插件

创建项目
前端打包工具太多,每种工具创建项目各有不同,写这篇文章的目的主要是科普一下vue3插件的开发流程,所以以最简单的方式进行,直接使用Vue CLI。运行命令:

vue create project

创建一个vue3的项目。因为开发的插件中不会用到 Vuex 和 Router,所以初始化项目是就不要选择了。

默认创建的vue项目的入口是 src 目录下的 main.js。修改 src 为 dev,到时候使用这里的代码来作为插件的测试demo。然后再创建一个 src 文件夹,并再其中创建 main.js 文件作为项目的入口。

4 修改入口配置

修改项目根目录下的package.json文件中的scripts 如下:

...  
"scripts": {
    "dev": "vue-cli-service serve dev/main.js",
    "build": "vue-cli-service build --target lib --name codeEditor src/main.js",
    "test:unit": "vue-cli-service test:unit"
  }
...

其中 dev 脚本是配置测试demo的启动,与正常的 vue 项目启动一致,只是修改了一下路径跟脚本名。

因为是开发的一个插件,打包时不能像普通vue项目一样打包成应用,而是要打包成库。Vue脚手架(Vue CLI)可以直接打包库,命令如下:

vue-cli-service build --target lib --name myLib [entry]

所以配置一个 build 脚本用来打包。

"build": "vue-cli-service build --target lib --name codeEditor src/main.js",
5 插件入口代码
import Component from '@/components'
export const install = (app, config) => {
    app.component(Component.name, Component)
    app.provide('codeEditor-global-config', config)
}

export const codeEditor = Component

export default {
    codeEditor,
    install
}

上面的代码可以作为组件插件的一个模板。

第1行代码是从src/components.js模块导入定义好的组件对象。

第2-5行代码是定义install方法,这是vue插件加载插件的钩子函数。当通过 app.use(插件) 添加插件时,如果传入的插件是个对象就会调用install方法,如果是一个function,则函数本身会被调用。并且这两种情况下,都会传入两个参数:由 Vue的createApp 生成的 app 对象,和用户传入的选项。所以上面代码中的 install 做了两件事情:

给传入的app对象添加了一个子组件,名字为Component.name,组件为Component,就是src/components.js模块中定义好的组件。
接受用户传入的配置项,并通过provide方法,通过keycodeEditor-global-config暴露出来,子组件中通过inject方法接收。

第6行代码是导出组件对象,供局部导入使用。

在dev/App.vue中可以通过如下代码局部导入使用:


  

第7-10行代码是导出一个包含组件和install方法,供全局导入使用。

在 dev/main.js 中可以通过如下代码全局导入使用:

import { createApp } from 'vue'
import App from './App.vue'
import CodeEditor  from "@/main";
createApp(App).use(CodeEditor,{dark:true,language:'python'}).mount('#app')
6 打包

插件编写完成后,运行npm run build即可完成打包,打包后会在项目根目录下生成dist文件夹,并生成文件

dist/yourLib.common.js:一个给打包器用的CommonJS包

dist/yourLib.umd.js:一个直接给浏览器或者AMD loader使用的UMD包

dist/yourLib.umd.min.js:压缩后的UMD构建版本

dist/yourLib.css:提取出来的css文件

7 如何发布到npm

写好的插件可以直接复制到项目中直接使用,也可以通过npm发布共享出来,通过npm install进行安装。非常简单步骤如下:

1.注册npm的账号,注册地址
https://www.npmjs.com/signup

2.编写package.json

在package.json中编写如下字段:

{
  "name": "@wcfdehao/code-editor",    # 插件名称
  "version": "1.0.0",  # 版本号
  "license": "MIT",  # 许可协议 
  "keywords": [  # 搜索关键词
    "codemirror",
    "vue3 codemirror",
    "vue3 code editor"
  ],
  "files": [  # 上传文件目录
    "dist"
  ],

}

3.发布

在项目根目录运行命令 npm publish 进行发布。如果是第一次,会提示你登录,输入你注册好的用户名密码即可。成功上传后,就可以通过 npm install 你的插件名称进行安装使用了。

现在我邀请你进入我们的软件测试学习交流群:746506216】,备注“入群”, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路。

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!

本文《解决一个蛋疼问题:如何编写一个 vue3插件》版权归爱吃 香菜所有,引用解决一个蛋疼问题:如何编写一个 vue3插件需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 本文详细介绍了如何在项目中引入和配置KindEditor网页编辑器,包括脚本引用、初始化编辑器以及文件上传功能的实现。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本文将介绍如何在混合开发(Hybrid)应用中实现Native与HTML5的交互,包括基本概念、学习目标以及具体的实现步骤。 ... [详细]
  • 本文详细介绍了如何在PHP中记录和管理行为日志,包括ThinkPHP框架中的日志记录方法、日志的用途、实现原理以及相关配置。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • Vue CLI 初始化 Webpack 项目时,main.js 文件是如何被调用的? ... [详细]
  • 在最近的学习过程中,我对Vue.js中的Prop属性有了更深入的理解,并认为这一知识点至关重要,因此在此记录一些心得体会。Prop属性用于在组件之间传递数据。由于每个组件实例的作用域都是独立的,无法直接引用父组件的数据。通过使用Prop,可以将数据从父组件安全地传递到子组件,确保数据的隔离性和可维护性。 ... [详细]
  • 七款高效编辑器与笔记工具推荐:KindEditor自动换行功能解析
    本文推荐了七款高效的编辑器与笔记工具,并详细解析了KindEditor的自动换行功能。其中,轻笔记QingBiJi是一款完全免费的记事本软件,用户可以通过其简洁的界面和强大的功能轻松记录和管理日常事务。此外,该软件还支持多平台同步,确保用户在不同设备间无缝切换。 ... [详细]
  • 在MySQL中更新密码时,首先需要在DOS窗口中切换到mysql安装目录,并使用`--skip-grant-tables`参数启动MySQL服务,以跳过权限表验证。接着,在MySQL命令行中执行相应的SQL语句来设置新密码。完成密码更新后,重启MySQL服务以使更改生效。此外,对于电脑快捷方式的修改,可以通过右键点击快捷方式,选择“属性”,在弹出的窗口中进行路径或目标的修改,最后点击“应用”和“确定”保存更改。 ... [详细]
  • 期末Web开发综合实践项目:运用前端技术打造趣味小游戏体验
    期末Web开发综合实践项目中,学生通过运用HTML、CSS和JavaScript等前端技术,设计并实现了一款趣味性十足的小游戏。该项目不仅检验了学生对前端基础知识的掌握情况,还提升了他们的实际操作能力和创意设计水平。视频链接展示了项目的最终成果,直观呈现了游戏的互动性和视觉效果。 ... [详细]
author-avatar
小色米虫_524
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有