Vue插件从封装到发布的完整步骤记录


Posted in Javascript onFebruary 28, 2019

插件的分类

  • 添加全局的方法或者属性 比如:vue-element
  • 添加全局的资源 比如:指令 v-bind
  • 通过mixin方法添加的一些混合
  • 添加Vue实例方法 Vue.prototype上面

插件的使用

通过全局方法 Vue.use() 使用插件。它需要在你调用 new Vue() 启动应用之前完成:

// 调用 `MyPlugin.install(Vue)`
Vue.use(MyPlugin)

new Vue({
 //... options
})```

也可以传入一个选项对象:
``` javascript
Vue.use(MyPlugin, { someOption: true })

插件开发

Vue.js 的插件有一个公开方法 install。这个方法的第一个参数是 Vue 构造器,第二个参数是一个可选的选项对象:

MyPlugin.install = function (Vue, options) {
 // 1. 添加全局方法或属性
 Vue.myGlobalMethod = function () {
 // 逻辑...
 }

 // 2. 添加全局资源
 Vue.directive('my-directive', {
 bind (el, binding, vnode, oldVnode) {
  // 逻辑...
 }
 ...
 })

 // 3. 注入组件
 Vue.mixin({
 created: function () {
  // 逻辑...
 }
 ...
 })

 // 4. 添加实例方法
 Vue.prototype.$myMethod = function (methodOptions) {
 // 逻辑...
 }

 //5.直接注册组件
 Vue.use();
}

其实无论采用什么方式,最终的目的则是在项目中可以使用,借助install 的Vue参数具体自己进行封装

从零开始的组件封装

需求: 封装一个微博表情的enoji插件

准备

node环境 vue环境 vue-cli脚手架 等等

创建工程

使用vue init 创建简单脚手架,简单修改就可以适合插件开发

vue init webpack-simple weibo-emoji
cd weibo-emoji
npm install

开发目录如下:

Vue插件从封装到发布的完整步骤记录

插件实现

项目具体逻辑实现可以去这里查看源码

我们正常webpack的entry入口一般会设置为main.js 做一些依赖引入和视图挂载等的操作,当我们编写插件的时候理所当然的就会省去挂载这一步操作了。

这里我们可以将index.js作为我们的入口文件,暴露出去的则是一个有这install方法的插件对象

代码如下:

import weiboEmoji from './compontent/weibo_emoji'
const emoji = {
 install(Vue, options) {
  Vue.component(weiboEmoji.name, weiboEmoji);
 }
}
if (typeof window !== 'undefined' && window.Vue) {
 window.Vue.use(emoji);
}
export default emoji

发布

发布之前检查一下webconfig配置:

entry: './src/index.js',// 入口
 output: {
  path: path.resolve(__dirname, './dist'),//打包输出目录
  publicPath: '/dist/',// 静态资源前缀
  filename: 'vue-weibo-emoji.js', //打包生成文件的名字
  library: 'WeiboEmoji', //umd 打包的时候模块的名字
  libraryTarget: 'umd',//打包方式 amd
  umdNamedDefine: true //打包未定义的时候使用默认名字
 },

检查发布配置:

"name": "weibo-emoji", // 打包的项目名,也就是modemodules里面的文件夹名字 也就是import from之后跟的名字
 "main": "dist/vue-weibo-emoji.js", // 是访问到nodemodules依赖,实际引入的文件 相当于入口
 "repository": {// 仓库 貌似仓库内容也不影响发布内容,填对就行
  "type": "git",
  "url": "https://github.com/icebluesky2666/weibo-emoji"
 },
 "description": "A Weibo emoji plugn",// 描述
 "version": "1.0.2",// 版本
 "author": "jhqin",// 作者
 "license": "MIT",// license 类型

对于多次发布,必须每次的版本号都不同

最后:

npm build
 npm login
 npm publish

使用

import WeiboEmoji from 'weibo-emoji'
Vue.use(WeiboEmoji)
<weibo-emoji class="emoji" :weiboIcon="weiboIcon" @changeEmoji="selsctEmoji = arguments[0].phrase" ref="emoji"> </weibo-emoji>

效果:

Vue插件从封装到发布的完整步骤记录

源码

Weibo-Emoji (本地下载)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Jquery遍历节点的方法小集
Jan 22 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
Apr 04 Javascript
javascript中AJAX用法实例分析
Jan 30 Javascript
即将发布的jQuery 3 有哪些新特性
Apr 14 Javascript
jQuery通用的全局遍历方法$.each()用法实例
Jul 04 Javascript
AngularJs验证重复密码的方法(两种)
Nov 25 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
Dec 13 Javascript
前端 Vue.js 和 MVVM 详细介绍
Dec 29 Javascript
canvas知识总结
Jan 25 Javascript
用angular实现多选按钮的全选与反选实例代码
May 23 Javascript
Angular表格神器ui-grid应用详解
Sep 29 Javascript
js实现html滑动图片拼图验证
Jun 24 Javascript
Javascript删除数组里的某个元素
Feb 28 #Javascript
vue强制刷新组件的方法示例
Feb 28 #Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
Feb 28 #Javascript
Vue CLI3.0中使用jQuery和Bootstrap的方法
Feb 28 #jQuery
Vue多组件仓库开发与发布详解
Feb 28 #Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
Feb 28 #Javascript
vue-cli3+typescript初体验小结
Feb 28 #Javascript
You might like
利用php+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
PHP生成唯一的促销/优惠/折扣码(附源码)
2012/12/28 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
2014/06/23 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
PHP实现八皇后算法
2019/05/06 PHP
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
JS逆序遍历实现代码
2014/12/02 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
深入理解Angular4订阅(Subscribe)与取消
2017/11/22 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
PHP webshell检查工具 python实现代码
2009/09/15 Python
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
Python selenium文件上传方法汇总
2020/11/19 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
2020/06/12 Python
python 模拟登录B站的示例代码
2020/12/15 Python
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
俄罗斯香水和化妆品购物网站:Л’Этуаль
2018/05/10 全球购物
Groupon西班牙官方网站:在线优惠券和交易,节省高达70%
2021/03/13 全球购物
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
生产现场工艺工程师岗位职责
2013/11/28 职场文书
志愿者活动总结
2014/04/28 职场文书
建筑工地门卫岗位职责
2014/04/30 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
个人授权委托书
2014/09/15 职场文书
销售合作意向书范本
2015/05/08 职场文书
西游记读书笔记
2015/06/25 职场文书
小学庆六一主持词
2015/06/30 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android
Java并发编程之原子性-Atomic的使用
2022/03/16 Java/Android
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers
SpringBoot Http远程调用的方法
2022/08/14 Java/Android