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 24 Javascript
jQuery检查事件是否触发的方法
Jun 26 Javascript
jQuery蓝色风格滑动导航栏代码分享
Aug 19 Javascript
详解能在多种前端框架下使用的表格控件
Jan 11 Javascript
JS库之Particles.js中文开发手册及参数详解
Sep 13 Javascript
puppeteer库入门初探
Jan 09 Javascript
vue3.0 搭建项目总结(详细步骤)
May 20 Javascript
vue3.0中的双向数据绑定方法及优缺点
Aug 01 Javascript
详解从vue-loader源码分析CSS Scoped的实现
Sep 23 Javascript
关于在LayUI中使用AJAX提交巨坑记录
Oct 25 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
Nov 08 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
Nov 16 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 来访国内外IP判断代码并实现页面跳转
2009/12/18 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
JavaScript实现点击文字切换登录窗口的方法
2015/05/11 Javascript
javascript字符串替换函数如何一次性全部替换掉
2015/10/30 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
纯css下拉菜单 无需js
2016/08/15 Javascript
node中使用es5/6以及支持性与性能对比
2017/08/11 Javascript
JavaScript编写棋盘覆盖代码详解
2017/08/28 Javascript
swiper移动端轮播插件(触碰图片之后停止轮播)
2017/12/28 Javascript
vuejs router history 配置到iis的方法
2018/09/20 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
2019/03/04 Javascript
浅谈Vue.js组件(二)
2019/04/09 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
2020/07/19 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
2020/09/04 Javascript
[02:43]DOTA2英雄基础教程 半人马战行者
2014/01/13 DOTA
详解python的数字类型变量与其方法
2016/11/20 Python
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
2018/01/15 Python
PHP实现发送和接收JSON请求
2018/06/07 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
简单了解Django ContentType内置组件
2019/07/23 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
2020/04/16 Python
python爬虫可以爬什么
2020/06/16 Python
css3弹性盒模型实例介绍
2013/05/27 HTML / CSS
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
你们项目是如何进行变更控制的
2015/08/26 面试题
JAVA中运算符的分类及举例
2015/09/12 面试题
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
2014五一国际劳动节活动总结范文
2014/04/14 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
php中pcntl_fork详解
2021/04/01 PHP