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字符编码函数区别分析
Jun 05 Javascript
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
Apr 18 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
Aug 29 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
Jan 12 Javascript
jQuery文件上传控件 Uploadify 详解
Jun 20 Javascript
微信小程序实现图片预加载组件
Jan 18 Javascript
vuex操作state对象的实例代码
Apr 25 Javascript
koa2实现登录注册功能的示例代码
Dec 03 Javascript
Vue指令指令大全
Feb 09 Javascript
node.js文件操作系统实例详解
Nov 05 Javascript
JavaScript通如何过RGraph实现动态仪表盘
Oct 15 Javascript
vue引入Excel表格插件的方法
Apr 28 Vue.js
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加密解密函数(动态加密)
2013/06/19 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
PHP简单获取随机数的常用方法小结
2017/06/07 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
JS 动态获取节点代码innerHTML分析 [IE,FF]
2009/11/30 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
在js(jquery)中获得文本框焦点和失去焦点的方法
2012/12/04 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
JS触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器
2016/10/30 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
js实现登录注册框手机号和验证码校验(前端部分)
2017/09/28 Javascript
浅谈如何使用 webpack 优化资源
2017/10/20 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
2019/09/16 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
[02:08]DOTA2英雄基础教程 马格纳斯
2014/01/17 DOTA
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
python频繁写入文件时提速的方法
2019/06/26 Python
Pycharm连接远程服务器并实现远程调试的实现
2019/08/02 Python
Python类如何定义私有变量
2020/02/03 Python
python中pow函数用法及功能说明
2020/12/04 Python
爱淘宝:淘宝网购物分享平台
2017/04/28 全球购物
巴黎卡诗加拿大官网:Kérastase加拿大
2018/11/12 全球购物
意大利网上药房:Farmacia 33
2020/01/27 全球购物
C语言面试题
2013/05/19 面试题
中学生团员自我评价分享
2013/12/07 职场文书
学前教育毕业生自荐信范文
2013/12/24 职场文书
英文商务邀请信
2014/01/22 职场文书
《雾凇》教学反思
2014/02/17 职场文书
青年文明号创建承诺
2014/03/31 职场文书
2014年大堂经理工作总结
2014/11/21 职场文书
仓库管理制度范本
2015/08/04 职场文书