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 相关文章推荐
js获取单选按钮的数据
Nov 27 Javascript
javascript 正则替换 replace(regExp, function)用法
May 22 Javascript
JQuery学习笔记 nt-child的使用
Jan 17 Javascript
javascript常用对话框小集
Sep 13 Javascript
jquery ajax中使用jsonp的限制解决方法
Nov 22 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
Dec 01 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
Jul 04 Javascript
js实现将json数组显示前台table中
Jan 10 Javascript
ES6深入理解之“let”能替代”var“吗?
Jun 28 Javascript
Nginx 配置多站点vhost 的方法
Jan 07 Javascript
详解react native页面间传递数据的几种方式
Nov 07 Javascript
node express使用HTML模板的方法示例
Aug 22 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创建多级目录的方法
2015/03/24 PHP
PHP快速生成各种信息提示框的方法
2016/02/03 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
TopList标签和JavaScript结合两例
2007/08/12 Javascript
JavaScipt基本教程之JavaScript语言的基础
2008/01/16 Javascript
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
javascript中window.event事件用法详解
2012/12/11 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
ajax分页效果(bootstrap模态框)
2017/01/23 Javascript
react.js 获取真实的DOM节点实例(必看)
2017/04/17 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
2017/07/27 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
vuejs中监听窗口关闭和窗口刷新事件的方法
2018/09/21 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
vue实现多级菜单效果
2019/10/19 Javascript
npm qs模块使用详解
2020/02/07 Javascript
jQuery实现简单评论区功能
2020/10/26 jQuery
浅析python递归函数和河内塔问题
2017/04/18 Python
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
python环形单链表的约瑟夫问题详解
2018/09/27 Python
python 上下文管理器及自定义原理解析
2019/11/19 Python
快速解决pymongo操作mongodb的时区问题
2020/12/05 Python
什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?
2016/08/13 面试题
自我评价是什么
2014/01/04 职场文书
户外活动策划方案
2014/03/12 职场文书
《庐山的云雾》教学反思
2014/04/22 职场文书
环保口号大全
2014/06/12 职场文书
领导班子整改方案和个人整改措施
2014/10/25 职场文书
八一建军节主持词
2015/07/01 职场文书
《卖火柴的小女孩》教学反思
2016/02/19 职场文书
如何获取numpy array前N个最大值
2021/05/14 Python
nginx lua 操作 mysql
2022/05/15 Servers