vue組件從開(kāi)發(fā)到發(fā)布的實(shí)現(xiàn)步驟
本文介紹了vue組件從開(kāi)發(fā)到發(fā)布的實(shí)現(xiàn)步驟,分享給大家,具體如下:

組件化是前端開(kāi)發(fā)非常重要的一部分,從業(yè)務(wù)中解耦出來(lái),可以提高項(xiàng)目的代碼復(fù)用率。更重要的是我們還可以打包發(fā)布,俗話說(shuō)集體的力量是偉大的,正因?yàn)橛性S許多多的開(kāi)源貢獻(xiàn)者,才有了現(xiàn)在的世界。
不想造輪子的工程師,當(dāng)不了合格的搬運(yùn)工 。讓我們來(lái)了解一下vue組件從開(kāi)發(fā)到打包發(fā)布流程,并配置Github主頁(yè)。
本文以 vue-clock2 組件為例,歡迎star _~~ 項(xiàng)目地址
- 目標(biāo)框架:vue
- 打包工具:webpack
- 發(fā)布源:npm
- 代碼托管:github
項(xiàng)目結(jié)構(gòu)
|-- node_modules |-- src | |-- index.js | |-- vue-clock.vue |-- docs | |-- index.html | |-- index.css |-- dist
- src: 組件相關(guān)代碼。
- node_modules: 組件依賴(lài)包。
- docs: 說(shuō)明文檔,組件簡(jiǎn)單的可以單個(gè)頁(yè)面,也可以使用vuepress。
- dist: 打包后組件內(nèi)容,一般 package.json 的 main 入口指向這個(gè)文件夾里的文件。
組件開(kāi)發(fā)
vue組件開(kāi)發(fā)相對(duì)來(lái)講還是比較容易的,創(chuàng)建一個(gè) vue-clock.vue 文件,組件的相關(guān)邏輯實(shí)現(xiàn)。
該組件主要實(shí)現(xiàn)一個(gè)基于 time 屬性輸入,顯示對(duì)應(yīng)時(shí)間的鐘表樣式。
<div class="clock">
<div class="clock-circle"></div>
<div class="clock-hour" :style="{transform:hourRotate}"></div>
<div class="clock-minute" :style="{transform:minuteRotate}"></div>
<b class="hour" v-for="h in timeList" :key="h">
<span>{{h}}</span>
</b>
</div>
通過(guò)元素畫(huà)出鐘表的樣式,基于 css3的transform 屬性旋轉(zhuǎn)出每個(gè)時(shí)間點(diǎn)。
因?yàn)殓姳淼臅r(shí)針并不是直接跳到下一個(gè)點(diǎn)的,所以需要計(jì)算出不同分鐘時(shí),時(shí)鐘指針的旋轉(zhuǎn)角度。
后續(xù)增加了不指定時(shí)間的情況,顯示當(dāng)前時(shí)間并每分鐘自動(dòng)更新。
export default {
data() {
return {
timeList: [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
hourRotate: "rotatez(0deg)",
minuteRotate: "rotatez(0deg)"
};
},
props: ["time"],
watch: {
time() {
this.show();
}
},
methods: {
show() {
this.showTime();
if (this._timer) clearInterval(this._timer);
if (!this.time) {
this._timer = setInterval(() => {
this.showTime();
}, 60 * 1000);
}
},
showTime() {
let times;
if (this.time) {
times = this.time.split(":");
} else {
const now = new Date();
times = [now.getHours(), now.getMinutes()];
}
let hour = +times[0];
hour = hour > 11 ? hour - 12 : hour;
let minute = +times[1];
let hourAngle = hour * 30 + minute * 6 / 360 * 30;
let minuteAngle = minute * 6;
this.hourRotate = `rotatez(${hourAngle}deg)`;
this.minuteRotate = `rotatez(${minuteAngle}deg)`;
}
},
mounted() {
this.show();
},
destroyed() {
if (this._timer) clearInterval(this._timer);
}
};
還有一些鐘表的布局樣式,可以直接在項(xiàng)目里查看。vue-clock.vue
接著我們需要拋出組件,以便在項(xiàng)目中引入使用。
// src/index.js
import Clock from './vue-clock.vue';
export default Clock;
if (typeof window !== 'undefined' && window.Vue) {
window.Vue.component('clock', Clock);
}
這里,組件開(kāi)發(fā)的部分已經(jīng)完成了,喝杯咖啡,check一下代碼,我們要把它打包發(fā)布到npm上。
打包發(fā)布
打包前確認(rèn)一下 webpack 的配置文件輸出。
output: {
path: path.resolve(__dirname, './dist'),
publicPath: '/dist/',
filename: 'vue-clock.min.js',
library: 'Clock',
libraryTarget: 'umd',
umdNamedDefine: true
}
打包組件文件到 dist 文件夾中。
npm run build
npm發(fā)布
配置package.json
{
"name": "vue-clock2",
"description": "Vue component with clock",
"version": "1.1.2",
"author": "bestvist",
"keywords": [
"vue",
"component",
"clock",
"time"
],
"main": "dist/vue-clock.min.js",
"license": "MIT",
"homepage": "https://bestvist.github.io/vue-clock2/"
}
登錄npm
如果使用淘寶鏡像的,需要先修正一下鏡像源。
npm config set registry https://registry.npmjs.org/
// 查看登錄人 npm whoami // 登錄 npm login // 發(fā)布 npm publish
如果看到類(lèi)似信息,說(shuō)明發(fā)布成功。
npm notice + vue-clock2@1.1.2
Github主頁(yè)
把項(xiàng)目上傳到github托管,配置一份基本 README.md 說(shuō)明文檔。
因?yàn)榻M件已經(jīng)發(fā)布到npm上,所以可以配置幾個(gè)徽章在README中。
// npm 版本 [npm version](https://img.shields.io/npm/v/vue-clock2.svg) // npm 下載量 [npm download](https://img.shields.io/npm/dt/vue-clock2.svg)
更多的徽章配置可以查看shields
接著描述一下組件的引入和使用方法:
安裝:
npm install vue-clock2
使用:
<template>
<clock :time="time"></clock>
</template>
<script>
import Clock from 'vue-clock2';
export default {
components: { Clock },
data () {
return {
time: '10:40'
}
}
}
</script>
更詳細(xì)的交互或是屬性說(shuō)明就交給文檔來(lái)解決了。
在 github 項(xiàng)目上通過(guò) settings 指定 GitHub Pages

組件文檔說(shuō)明應(yīng)包括:
- 組件引入方法
- 組件使用方法
- 一個(gè)簡(jiǎn)單的例子
- 組件屬性描述說(shuō)明
總結(jié)
開(kāi)發(fā) -> 發(fā)布 -> 托管
一個(gè)組件輪子的制作流程大致介紹完了,希望本文可以幫助到您。也希望大家多多支持腳本之家。
相關(guān)文章
Vue實(shí)現(xiàn)簡(jiǎn)易購(gòu)物車(chē)案例
這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)簡(jiǎn)易購(gòu)物車(chē)案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
vue自定義指令實(shí)現(xiàn)僅支持輸入數(shù)字和浮點(diǎn)型的示例
今天小編就為大家分享一篇vue自定義指令實(shí)現(xiàn)僅支持輸入數(shù)字和浮點(diǎn)型的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
vue3.2自定義彈窗組件結(jié)合函數(shù)式調(diào)用示例詳解
這篇文章主要為大家介紹了vue3.2自定義彈窗組件結(jié)合函數(shù)式調(diào)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
Vue利用高德地圖API實(shí)現(xiàn)實(shí)時(shí)天氣
這篇文章主要為大家詳細(xì)介紹了Vue如何利用高德地圖API實(shí)現(xiàn)實(shí)時(shí)天氣,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
詳解element-ui 組件el-autocomplete使用踩坑記錄
最近使用了el-autocomplete組件,本文主要介紹了element-ui 組件el-autocomplete使用踩坑記錄,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
vue中使用element ui的彈窗與echarts之間的問(wèn)題詳解
這篇文章主要介紹了vue中使用element ui的彈窗與echarts之間的問(wèn)題詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
vue使用百度地圖報(bào)錯(cuò)BMap?is?not?defined問(wèn)題及解決
這篇文章主要介紹了vue使用百度地圖報(bào)錯(cuò)BMap?is?not?defined問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
vue?draggable組件實(shí)現(xiàn)拖拽及點(diǎn)擊無(wú)效問(wèn)題的解決
這篇文章主要介紹了vue?draggable組件實(shí)現(xiàn)拖拽及點(diǎn)擊無(wú)效問(wèn)題的解決,只需要在設(shè)置handle屬性就可以了,.defaultTypeTag 是要拖拽的塊的類(lèi)名,要注意的是需要做點(diǎn)擊事件的項(xiàng)不能包含在這個(gè)類(lèi)名里面,不然會(huì)無(wú)法觸發(fā)點(diǎn)擊事件,詳細(xì)解決辦法跟隨小編一起學(xué)習(xí)吧2022-05-05
Vue3之路由的query參數(shù)和params參數(shù)用法
這篇文章主要介紹了Vue3之路由的query參數(shù)和params參數(shù)用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03

