vue封装第三方插件并发布到npm的方法


Posted in Javascript onSeptember 25, 2017

前言

写此文前特意google了一下,因为有较详细的开发教程我再写意义不大,有把插件封装成组件的教程,有把自己的组件封住成插件的教程,本文主要说明如何把第三方的插件封装成vue插件,简化配置,一键安装,主要提供思路,封装方法大同小异·,文章略长要有耐心。

gitment

gitment是一个基于github issues封装的评论插件,以这个插件作为演示,把它封装成vue插件。vue-gitment,该插件已发布到npm,并在自己的开源项目vueblog中安装使用

项目初始化

封装vue的插件用webpack-simple很合适,vue init webpack-simple vue-gitment此命令创建我们的项目的目录,创建文件夹和文件,最后结构是这样的

vue封装第三方插件并发布到npm的方法

lib目录是我们的插件目录,其他的默认就好

修改配置项

首先是修改package.json

{
 "name": "vue-gitment",
 "version": "0.1.1",
 "description": "A comment plugin by gitment",
 "main": "dist/vue-gitment.js",
 "directories": {
  "dist": "dist"
 },
 "scripts": {
  "dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot",
  "build": "cross-env NODE_ENV=production webpack --progress --hide-modules"
 },
 "repository": {
  "type": "git",
  "url": "git+https://github.com/vue-blog/vue-gitment.git"
 },
 "dependencies": {
  "gitment": "^0.0.3",
  "vue": "^2.3.3"
 },
 "devDependencies": {
 },
 "author": "wmui",
 "license": "MIT",
 "bugs": {
  "url": "https://github.com/vue-blog/vue-gitment/issues"
 },
 "homepage": "https://github.com/vue-blog/vue-gitment#readme"
}

把依赖性gitment添加到dependencies,main是我们打包后的文件入口,你可以用npm init命令生成一个package.json

修改webpack.config.js

vue封装第三方插件并发布到npm的方法

我们只需配置入口和出口,不要删除默认的配置,因为后面开发好插件,我们需要查看工作效果

修改index.html

vue封装第三方插件并发布到npm的方法

因为我们修改了webpack配置,自然要把script的src修改一下

封装插件

VueComment.vue内容如下

<template>
 <div v-comment="options"></div>
</template>
<script>
// 引入依赖项
import Gitment from 'gitment'
export default {
 name: 'vue-comment',
 props: ['options'],
 directives: {
  // 自定义指令
  comment: {
   bind: function (el, binding) {
    const gitment = new Gitment({
     id: binding.value.id + '',
     owner: binding.value.owner,
     repo: binding.value.repo,
     oauth: {
      client_id: binding.value.oauth.client_id,
      client_secret: binding.value.oauth.client_secret
     }
    })
    gitment.render(el)
   }
  }
 }
}
</script>

相信熟悉vue的一眼都看懂了,render函数是gitment对象的方法,不用关心,和我们开发组件是一样一样的

index.js封装组件

import VueComment from './VueComment.vue'
const comment = {
 install: function(Vue) {
  Vue.component(VueComment.name, VueComment)
 }
}
// 这里的判断很重要
if (typeof window !== 'undefined' && window.Vue) { 
  window.Vue.use(comment) 
}
export default comment

我们在webpack配置的入口文件就是他,install是挂载组件的方法,有了它我们就可以在外部use一个插件了,简单吧

测试插件

首先测试build是否成功

npm run builddist目录会生成如下文件

vue封装第三方插件并发布到npm的方法

可喜可贺,接下来测试插件是否正常工作

我们需要把package和webpack的修改一下,这就是为什么我前面说不要删除而是注释掉 ,把package.json的main修改为dist/build.js,wepack的entry和filename换成默认配置,index.html的src也换成默认的

在main.js中引入我们的组件

import VueComment from './lib/index.js'
Vue.use(VueComment)

App.vue中使用我们的插件

<template>
 <div id="app">
  <vue-comment :options="options" v-if="options"></vue-comment>
 </div>
</template>
<script>
export default {
 name: 'App',
 data() {
  return {
   options: {
    id: 'article id',
    owner: 'Your GitHub ID',
    repo: 'The repo to store comments',
    oauth: {
     client_id: 'Your client ID', 
     client_secret: 'Your client secret',
    } 
   }
  }
 }
}
</script>
<style>
  @import '~gitment/style/default.css';
</style>

执行npm run dev

vue封装第三方插件并发布到npm的方法

哈哈,它正常工作了,Error: Not Found是因为我没配置client_id。

发布插件

完成测试工作后我们就可以发布到npm了,这个就比较见到了,注册个npm账号,在你要发布的项目目录执行npm login,输入账号密码和邮箱,然后npm publish就发布成功了,npm install vue-gitment查看效果,建议直接看源代码,因为真的很简单。

结语

自己动手丰衣足食,我觉得每个前端开发者都要一个属于自己的轮子(虽然vue-gitment不是轮子),一个属于自己轮子,在造轮子的工程中你能学到很多很多

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
让IE6支持min-width和max-width的方法
Jun 25 Javascript
JavaScript/jQuery 表单美化插件小结
Feb 14 Javascript
js confirm()方法的使用方法实例
Jul 13 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
Nov 26 Javascript
JavaScript中用于生成随机数的Math.random()方法
Jun 15 Javascript
javascript弹出拖动窗口
Aug 11 Javascript
JavaScript仿网易选项卡制作代码
Oct 06 Javascript
Bootstrap Modal遮罩弹出层(完整版)
Nov 21 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
May 18 Javascript
vue动态注册组件实例代码详解
May 30 Javascript
Vue自定义组件双向绑定实现原理及方法详解
Sep 03 Javascript
nuxt引入组件和公共样式的操作
Nov 05 Javascript
javascript input输入框模糊提示功能的实现
Sep 25 #Javascript
vue-cli中的webpack配置详解
Sep 25 #Javascript
react.js 父子组件数据绑定实时通讯的示例代码
Sep 25 #Javascript
react native与webview通信的示例代码
Sep 25 #Javascript
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
Sep 25 #Javascript
vuex中使用对象展开运算符的示例
Sep 25 #Javascript
Three.js利用性能插件stats实现性能监听的方法
Sep 25 #Javascript
You might like
用PHP实现的四则运算表达式计算实现代码
2011/08/02 PHP
yii2缓存Caching基本用法示例
2016/07/18 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
Javascript里使用Dom操作Xml
2006/09/20 Javascript
jQuery最佳实践完整篇
2011/08/20 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
js中数组结合字符串实现查找(屏蔽广告判断url等)
2016/03/30 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
2016/08/08 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
JavaScript易错知识点整理
2016/12/05 Javascript
jQuery实现下拉菜单的实例代码
2017/06/19 jQuery
详解webpack进阶之loader篇
2017/08/23 Javascript
JavaScript实现各种排序的代码详解
2017/08/28 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
Nodejs中使用phantom将html转为pdf或图片格式的方法
2017/09/18 NodeJs
vue+axios+mock.js环境搭建的方法步骤
2018/08/28 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
python中将字典转换成其json字符串
2014/07/16 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
2018/06/22 Python
Python中的Numpy矩阵操作
2018/08/12 Python
详解python读取和输出到txt
2019/03/29 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
pycharm创建scrapy项目教程及遇到的坑解析
2019/08/15 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
信号生成及DFT的python实现方式
2020/02/25 Python
通过代码实例了解Python sys模块
2020/09/14 Python
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
党校培训思想汇报
2013/12/30 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
师范生教育见习总结
2015/06/23 职场文书
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android