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 相关文章推荐
Javascript 命名空间模式
Nov 01 Javascript
js控制淡入淡出示例代码
Nov 12 Javascript
使用Javascript简单实现图片无缝滚动
Dec 05 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
Oct 21 Javascript
全面解析Bootstrap布局组件应用
Feb 22 Javascript
JavaScript代码生成PDF文件的方法
Feb 26 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
May 24 Javascript
浅谈JS中String()与 .toString()的区别
Oct 20 Javascript
javascript函数的四种调用模式
Jan 08 Javascript
Javascript中click与blur事件的顺序详析
Apr 25 Javascript
Vue实现active点击切换方法
Mar 16 Javascript
JavaScript HTML DOM元素 节点操作汇总
Jul 29 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下通过系统信号量加锁方式获取递增序列ID
2009/09/25 PHP
php实例分享之二维数组排序
2014/05/15 PHP
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
php编程每天必学之验证码
2016/03/03 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
PHP+redis实现微博的拉模型案例详解
2019/07/10 PHP
javascript学习之闭包分析
2010/12/02 Javascript
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
2011/01/01 Javascript
总结Javascript中的隐式类型转换
2016/08/24 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
2017/10/17 Javascript
vue 中引用gojs绘制E-R图的方法示例
2018/08/24 Javascript
小程序实现抽奖动画
2020/04/16 Javascript
微信小程序上传图片并等比列压缩到指定大小的实例代码
2019/10/24 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
[01:32]2014DOTA2西雅图邀请赛 CIS我们有信心进入正赛
2014/07/08 DOTA
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
2015/04/28 Python
Python可变参数用法实例分析
2017/04/02 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
Python遍历numpy数组的实例
2018/04/04 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
Python Process多进程实现过程
2019/10/22 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
使用python计算三角形的斜边例子
2020/04/15 Python
python 画条形图(柱状图)实例
2020/04/24 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
python实现计算器简易版
2020/12/17 Python
群众路线教育实践活动剖析材料
2014/09/30 职场文书
2014镇党委书记党建工作汇报材料
2014/11/02 职场文书
毕业证明模板
2015/06/19 职场文书
导游词之舟山普陀山
2019/11/06 职场文书
如何判断微信付款码和支付宝付款码
2021/04/01 PHP