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页面滚动时层智能浮动定位实现(jQuery/MooTools)
Aug 23 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
Oct 07 Javascript
Bootstrap每天必学之弹出框(Popover)插件
Apr 25 Javascript
jQuery提示插件qTip2用法分析(支持ajax及多种样式)
Jun 08 Javascript
关于JavaScript 原型链的一点个人理解
Jul 31 Javascript
D3.js实现散点图和气泡图的方法详解
Sep 21 Javascript
详解webpack异步加载业务模块
Jun 23 Javascript
angularjs 获取默认选中的单选按钮的value方法
Feb 28 Javascript
详解Angular路由之路由守卫
May 10 Javascript
vue车牌号校验和银行校验实战
Jan 23 Javascript
前端性能优化建议
Sep 17 Javascript
Vue使用Element实现增删改查+打包的步骤
Nov 25 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
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
php中使用sftp教程
2015/03/30 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
2016/08/23 PHP
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
JS面向对象编程浅析
2011/08/28 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
JS自调用匿名函数具体实现
2014/02/11 Javascript
常见浏览器多长时间会提示“脚本运行时间过长”总结
2014/04/29 Javascript
jquery-syntax动态语法着色示例代码
2014/05/14 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
基于JavaScript实现弹幕特效
2020/08/27 Javascript
详解angularjs 学习之 scope作用域
2018/01/15 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
对node通过fs模块判断文件是否是文件夹的实例讲解
2019/06/10 Javascript
vue中使用elementUI组件手动上传图片功能
2019/12/13 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python的id()函数解密过程
2012/12/25 Python
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
Python查询阿里巴巴关键字排名的方法
2015/07/08 Python
Python编程之字符串模板(Template)用法实例分析
2017/07/22 Python
对dataframe数据之间求补集的实例详解
2019/01/30 Python
python开发入门——列表生成式
2020/09/03 Python
非凡女性奢华谦虚风格:The Modist
2017/10/28 全球购物
欧舒丹俄罗斯官方网站:L’OCCITANE俄罗斯
2019/11/22 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
什么是命名空间(NameSpace)
2015/11/24 面试题
2014办公室年度工作总结
2014/12/09 职场文书
2015年机关党建工作总结
2015/05/22 职场文书