一个vue组件库发布到npm的完整实现过程
新建项目
初始化一个vue项目
src下面创建一个plugins文件夹,index.js文件,这个文件是组件的出口文件。
npm install @/vue-cli -g npm create vue-components cd vue-components npm run serve
创建组件库
src下新建一个plugins文件夹
然后创建toast组件toast/index.vue
这里为了能够展示模版,div标签后面的>去掉了。
<template> <div class="hello" <div class="toast" :class="{active: toastStatus}" <div class="toast-wrapper"{{text}}</div </div </div </template> <script> export default { name: 'vue-toast', data() { return { toastStatus: false, text:'' } }, methods: { handlerToast(toastInfo,time) { this.text = toastInfo; this.toastStatus = true; time = time || 2000 setTimeout(() => { this.toastStatus = false; }, time) } }, } </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped > .toast { position: absolute; left: 50%; top: 30%; transform: translate(-50%, 50%); min-width: 0px; min-height: 0; table-layout: center; background: rgba(0,0,0,0.5); display: none } .active { display: block } </style>
再创建一个button组件button/index.vue
<template> <div class="hello" <button这里是button组件</button </div </template> <script> export default { name: 'vue-button', props: { msg: String }, data() { return { } }, methods: { }, } </script>
两个组件都是很简单的组件,这里对于组件的内容不做详细解释,我们要达到这样的效果,如下面的vue的入口文件main.js。只需要引入plugins,然后Vue.use()一下就可以在全局使用toast组件和button组件。
所以这两个组件一定是全局注册的,注册的过程就在Vue.use()调用的过程中。
import Vue from 'vue' import App from './App.vue' import router from './router' import store from './store' import './registerServiceWorker' import plugins from './plugins' Vue.config.productionTip = false Vue.mixin({ mounted() { console.log('组件加载完成') } }) Vue.use(plugins) new Vue({ router, store, render: h => h(App) }).$mount('#app')
如果要实现上面效果,就需要在plugins中创建一个index.js文件,这个文件需要暴露一个对象,对象中有install方法。
import Toast from './toast' import Button from './button' const install = (Vue) => { console.log(Vue, Toast, Button) } export default { install };
在这个方法中,接收到一个参数是Vue,我们就可以在这个方法中把所有需要的组件注册好。
import Toast from './toast' import Button from './button' const install = (Vue) => { console.log(Vue, Toast, Button); Vue.component(Toast.name, Toast); Vue.component(Button.name, Toast); } export default { install };
这样就可以在在任何一个组件中使用你写好的组件了。
来试一下, 把 HelloWorld
组件替换为vue-button。
可以看到组件已经可以正常展示了。并且可以在任意的地方使用。
如果plugins里面组件比较多,就需要写很多引入的代码,然后再一个一个的去注册,写起来有是一件无脑化的事情。
这里可以借用require这个api做到自动化引入。
plugins/index.js
const requireComponent = require.context('./', true, /\.vue$/); console.log(requireComponent.keys()) const install = (Vue) => { if(install.installed) return; install.installed = true; requireComponent.keys().map(path => { const config = requireComponent(path); console.log(config) const componnetName = config.default.name; Vue.component(componnetName, config.default || config) }) } export default { install };
就这么看可能不知道在做什么,来看下下面两个值,你就能明白上面代码在做什么了。
requireComponent.keys()刚好是文件的路径
console.log(requireComponent.keys())
requireComponent(path)的返回值,正好包含了组件的实例信息
console.log(config)
打包部署
接下来对项目打包发布。
调整package.json文件 scripts
"lib": "vue-cli-service build --target lib --name vue-toast --dest lib src/plugins/index.js"
npm run lib
生产打包目录
package.json文件这几个属性不可缺少
登陆npm
npm publish发布
使用
npm i vue-toast-maile
import plugins from 'vue-toast-maile' import "../node_modules/vue-toast-maile/lib/vue-toast.css" Vue.use(plugins)
就可以在项目中使用了。
总结
到此这篇关于一个vue组件库发布到npm的文章就介绍到这了,更多相关vue组件库发布npm内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
第一次在Vue中完整使用AJAX请求和axios.js的实战记录
AJAX是现代Web开发的一个关键部分,尽管它一开始看起来令人生畏,但在你的武库中拥有它是必须的,下面这篇文章主要给大家介绍了关于第一次在Vue中完整使用AJAX请求和axios.js的相关资料,需要的朋友可以参考下2022-11-11vue3使用vuex实现页面实时更新数据实例教程(setup)
在前端开发中往往会遇到页面需要实时刷新数据的情况,给用户最新的数据展示,这篇文章主要给大家介绍了关于vue3使用vuex实现页面实时更新数据(setup)的相关资料,需要的朋友可以参考下2022-09-09iview中实现this.$Modal.confirm自定义弹出框换行加样式
这篇文章主要介绍了iview中实现this.$Modal.confirm自定义弹出框换行加样式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-09-09vue利用vue meta info设置每个页面的title与meta信息
这篇文章主要给大家介绍了关于vue如何利用vue meta info设置每个页面的title与meta信息的相关资料,文中将实现的方法介绍的非常详细,对大家学习或者使用vue具有一定的参考学习价值,需要的朋友可以参考下2021-10-10vue-cli下的vuex的简单Demo图解(实现加1减1操作)
这篇文章主要介绍了vue-cli下的vuex的简单Demo(实现加1减1操作),本文图文并茂给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下2018-02-02Vue项目Element表格对应字段映射显示方法:formatter格式化数据问题
这篇文章主要介绍了Vue项目Element表格对应字段映射显示方法:formatter格式化数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-07-07
最新评论