发布vue插件到npm上
Posted zhensg123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了发布vue插件到npm上相关的知识,希望对你有一定的参考价值。
总体分为2个步骤
一,先写好插件
二,发布到npm上面
一,写vue插件
vue有一个开放的方法install,在vue插件需要写在这个方法里面,在vue官网,里面说的很清楚,这个方法里面可以是全局方法,可以是指令还可以是挂载在原型的方法。
而vue在使用插件时候,需要首先use。
写好插件之后需要应用webpack打包。然后将代码统一推送到npm上面就可以了。
二,发布到npm上面
1)首选需要有个npm注册账号,这个可以直接在npm官方注册
2)在cmd上面切换路径到打包好的vue插件目录
3)在cmd上面执行 npm adduser命令,这个时候会需要输入前面申请的username和password
4)执行npm publish即可
5)每次推送需要修改package.json的版本号,每次的版本号不能与前面相同
三,具体案例
写了小案例vue-toast-zhensg
1)vue组件代码
<template> <section class="toast-container"> <div class="toast" v-bind:class="[visible?‘fade-in‘:‘fade-out‘]"> <span>{{message}}</span> </div> </section> </template> <style lang="scss"> @keyframes fade-in { 0% { opacity: 0; transform: scale(0.7); } 100% { opacity: 1; transform: scale(1); } } @keyframes fade-out { 0% { opacity: 1; transform: scale(1); } 100% { opacity: 0; transform: scale(0.7); } } .toast-container{ position: absolute; left: 0; top:0; bottom: 0; right:0; z-index: 2000; display: flex; justify-content: center; align-items: center; .fade-in{ animation-name: fade-in; animation-duration: 0.5s; animation-fill-mode: both; } .fade-out{ animation-name: fade-out; animation-duration: 0.5s; animation-fill-mode: both; } .toast{ width: 180px; height: 60px; text-align: center; line-height: 60px; background-color: black; color: white; border-radius: 13px; } } </style> <script> export default{ data(){ return{ message:‘hello,Vue-toast‘, visible:true } } } </script>
2)js部分,也就是插件功能部分代码
import ToastComponent from ‘./vue-toast.vue‘ //凡是vue插件一定有这个方法。目的是use使用,才能被use引用 let install = function (Vue,options) { var opt={ duration:3000 } for(var key in options){ opt[key]=options[key]; } //挂载在原型上 使用的时候this.$toast Vue.prototype.$toast = function (message,option) { if(typeof option=="object"){ for(var key in option){ opt[key]=option[key]; } } //Vue.extend可以继承这个组件,然后得到一个新的组件 const ToastController = Vue.extend(ToastComponent); //创建一个新的实例,实例挂载在一个空的div var instance = new ToastController().$mount(document.createElement("div")); instance.message = message; instance.visible = true; document.body.appendChild(instance.$el); //将div添加到dom中 setTimeout(()=>{ instance.visible = false; setTimeout(()=>{ document.body.removeChild(instance.$el) },500) },6000) } Vue.prototype.$toast[‘show‘] = function (message,option) { return Vue.prototype.$toast(message,option); } } export default install;
3)webpack打包代码
var path = require(‘path‘); module.exports = { entry:‘./src/index.js‘, output:{ path:path.join(__dirname,‘./dist‘), filename:‘vue-toast.js‘, libraryTarget: "umd", //一套完整的规范 cmd amd library: ‘VueToast‘ //库的名字 }, module:{ rules:[ { test:/.js$/, loader:‘babel-loader‘, include:path.join(__dirname,‘src‘), exclude:/node_modules/, }, { test:/.vue$/, loader:‘vue-loader‘, include:path.join(__dirname,‘src‘), exclude:/node_modules/, options:{ loaders:{ scss:‘style-loader!css-loader!postcss-loader!sass-loader‘ }, } } ] }, plugins: [ ] }
4)package.json代码 main的路径必须是打包好的路径
{ "name": "vue-toast-zhensg", "version": "1.0.5", "description": "", "main": "dist/vue-toast.js", "scripts": { "test": "echo "Error: no test specified" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "vue": "^2.3.4", "webpack": "^3.1.0" }, "devDependencies": { "autoprefixer": "^9.3.1", "babel-core": "^6.25.0", "babel-loader": "^7.1.1", "babel-preset-env": "^1.6.0", "css-loader": "^0.28.11", "node-sass": "^4.5.3", "postcss": "^6.0.6", "postcss-loader": "^2.0.6", "postcss-modules-local-by-default": "^1.2.0", "sass-loader": "^6.0.6", "style-loader": "^0.18.2", "uglifyjs-webpack-plugin": "^0.4.6", "vue-loader": "^13.0.0", "vue-template-compiler": "^2.3.4" }, "_from": "[email protected]", "_resolved": "http://registry.npm.taobao.org/vue-toast-zhensg/download/vue-toast-zhensg-1.0.0.tgz" }
5)我发布的npm插件路径:https://www.npmjs.com/package/vue-toast-zhensg
以上很简单的一个插件。
以上是关于发布vue插件到npm上的主要内容,如果未能解决你的问题,请参考以下文章