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 相关文章推荐
JavaScript使用cookie
Feb 02 Javascript
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
Sep 09 Javascript
JS将制定内容复制到剪切板示例代码
Feb 11 Javascript
javascript Deferred和递归次数限制实例
Oct 21 Javascript
调试JavaScript中正则表达式中遇到的问题
Jan 27 Javascript
JS获取网页图片name属性的方法
Apr 01 Javascript
jQuery ajax分页插件实例代码
Jan 27 Javascript
jquery获取img的src值的简单实例
May 17 Javascript
JS百度地图搜索悬浮窗功能
Jan 12 Javascript
jQuery实现的淡入淡出图片轮播效果示例
Aug 29 jQuery
JS开发自己的类库实例分析
Aug 28 Javascript
vue实现Input输入框模糊查询方法
Jan 29 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开发文档 会员收费1期
2012/08/14 PHP
非常有用的9个PHP代码片段
2016/04/06 PHP
php 数组随机取值的简单实例
2016/05/23 PHP
Javascript操纵Cookie实现购物车程序
2007/02/15 Javascript
ie 调试javascript的工具
2009/04/29 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
2011/11/30 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
2013/11/25 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
jqTransform美化表单
2015/10/10 Javascript
javascript仿百度输入框提示自动下拉补全
2016/01/07 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
Python及PyCharm下载与安装教程
2017/11/18 Python
Python实现基于PIL和tesseract的验证码识别功能示例
2018/07/11 Python
对Python 多线程统计所有csv文件的行数方法详解
2019/02/12 Python
python爬取基于m3u8协议的ts文件并合并
2019/04/26 Python
python 消费 kafka 数据教程
2019/12/21 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
python如何进行矩阵运算
2020/06/05 Python
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
打印机墨盒:123Inkjets
2017/02/16 全球购物
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
行政内勤岗位职责
2014/04/07 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
银行进社区活动总结
2014/07/07 职场文书
2014新生大学四年计划书
2014/09/21 职场文书
离婚承诺书格式范文
2015/05/04 职场文书
小学生手册家长意见
2015/06/03 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL