目标:开发一个 vue 插件,发布到npm而且,能够使用 npm 安装。javascript
vue list
查看当前在线的模板信息步骤以下:css
vue init webpack-simple projectName
运行项目:html
cd projectName npm install npm run dev
在 src 文件夹下面建 lib 文件夹,用于存放插件。lib 文件夹下再建 toast.js 和 toast.vue 两个文件。整个项目目录以下所示:vue
toast.vue 的内容以下:java
<template> <div class="vue-toast-wraper" v-show="isShow"> {{msg}} </div> </template> <script> export default { name:'toast', props:{ msg:{ default:"", type:String }, isShow:{ default:false, type:Boolean } }, mounted(){ if(this.isShow){ setTimeout(() => { this.isShow = false },2500); } } } </script> <style scoped> .vue-toast-wraper{ background: rgba(0, 0, 0, 0.6); color: #fff; font-size: 17px; padding: 10px; border-radius:12px; display: -webkit-box; -webkit-box-pack: center; -webkit-box-align: center; position: fixed; top: 50%; left: 50%; z-index: 2000; -webkit-transform: translateY(-50%); transform: translateY(-50%); -webkit-transform: translateX(-50%); transform: translateX(-50%); } </style>
toast.vue 是作一个 弹出提示,其中传入的参数有两个:toastMsg 和 isSHowToast,分别表示 提示消息以及是否显示提示。webpack
toast.js 中写 install 方法,内容以下:git
import VueToastPlugin from './toast.vue' const toastPlugin = { install: function(Vue) { Vue.component(VueToastPlugin.name, VueToastPlugin) } } // global 状况下 自动安装 if (typeof window !== 'undefined' && window.Vue) { window.Vue.use(toastPlugin) } // 导出模块 export default toastPlugin
3. 本地测试web
本插件的功能就这么多,由于咱们还没有发布,因此先进行本地测试。npm
3.1 将 App.vue 多余代码删除。json
3.2 在 main.js 中引入
import Vue from 'vue' import App from './App.vue' import Toast from './lib/toast.js' Vue.use(Toast) new Vue({ el: '#app', render: h => h(App) })
3.3 在 App.vue 中使用 toast (别忘记须要传递的参数)
<template> <div id="app"> <toast :msg = "'测试'" :isShow = "true"/> </div> </template> <script> export default { name: 'app' } </script> <style lang="scss"> </style>
3.4 本地测试的结果,如图,是所指望的
本地测试没有问题事后,咱们就能够准备一下修改配置,为打包发布作准备。
去掉 dist。
<body> <div id="app"></div> <script src="/dist/toast.js"></script> </body>
npm run build
移步 npm 官网。
npm adduser
npm publish
参考文档:
01. 《vue 插件开发教程与发布》 CSDN ,做者:吹过麦田的风;
02. 《Vue 插件开发与发布》 CSDN,做者:白云随风飘;