基於Vue搭建自己的組件庫(1)

来源:https://www.cnblogs.com/sloane/archive/2020/05/18/12912930.html
-Advertisement-
Play Games

本項目演示地址:https://husilang.github.io/zm-ui 項目參考文章:從零開始搭建Vue組件庫 VV-UI 項目的初衷是學習怎麼封裝一個基於Vue的UI組件庫,順便記錄每個步驟,以及在此過程中遇到的難點及體會。 下麵是我個人的一個項目搭建流程,希望能幫助大家。 ①腳手架初始 ...


本項目地址:https://github.com/husilang/zm-ui

項目參考文章:從零開始搭建Vue組件庫 VV-UI

項目的初衷是學習怎麼封裝一個基於Vue的UI組件庫,順便記錄每個步驟,以及在此過程中遇到的難點及體會。

下麵是我個人的一個項目搭建流程,希望能幫助大家。

①腳手架初始化項目

使用 vue cli 3.0.0版本以上,在node或cmd中輸入以下命令創建項目

vue create project-name

選擇 Manually select features
選擇Babel,Router,Vuex,CSS Pre-processors,Unit Testing
選擇Sass/SCSS(with node-sass)
選擇Mocha + Chai
選擇In dedicated config files
以上來安裝(按需選擇)
運行如下命令:

cd project-name
npm run serve

看項目是否成功啟動,啟動成功恭喜你完成第一小步~

②目錄結構修改

src目錄修改為examples,用來組件示例
在examples目錄下,新建docs文件夾,用來編寫各組件的文檔
在項目下新增packages文件夾,用來存放封裝的組件

③增加配置文件

由於修改了目錄結構,需要修改相關配置,這裡參考vue cli官網。
在項目根目錄下,增加配置文件vue.config.js,代碼如下:

const path = require("path");
module.exports = {
    pages: {
        index: {
            entry: "examples/main.js", // js入口文件修改
            template: "public/index.html",
            filename: "index.html"
        }
    },
    chainWebpack: config => {
        // 重新設置目錄別名
        config.resolve.alias
            .set("@", path.resolve("examples"))
            .set("~", path.resolve("packages"));
        // 使 examples及packages目錄下的js文件都加入編譯
        config.module
            .rule("js")
            .include.add("/packages")
            .end()
            .include.add("/examples")
            .end()
            .use("babel")
            .loader("babel-loader");
    },
}

運行npm run serve 查看是否能成功啟動

④編寫第一個組件

接下來,就是要封裝第一個組件,由於此文檔的重點不是講解組件怎麼封裝,那我們就先寫一個簡單的組件用來測試好了。

編寫組件前,我先去瞭解了一下css命名規範BEM

看了幾篇關於BEM的文章後,還是比較模糊,實踐出真知,在以後的組件封裝中,我會慢慢去使用這種規範。

在packages下封裝一個test組件

在packages下新建一個文件夾test,test目錄下新建index.js文件以及src/test.vue,如下:
在packages/test/src/test.vue中

<template>
    <div class="zm-test" :style="{backgroundColor: bgColor}"></div>
</template>

<script>
    export default {
        name: 'ZmTest',
        props: {
            bgColor: {
                type: String,
                default: "#ccc"
            }
        }
    }
</script>

<style lang="scss">
    .zm-test {
        display: inline-block;
        width: 10px;
        height: 10px;
        border-radius: 50%;
        animation: zm-opacity 2s infinite linear;
    }
    @keyframes zm-opacity{
        0% {opacity:1}
        10%,90%{opacity:.8}
        20%,80%{opacity:.7}
        30%,70%{opacity:.5}
        40%,60%{opacity:.3}
        50%{opacity:0}
        100%{opacity:.95}
    }
</style>

在packages/test/index.js中

import ZmTest from './src/test.vue'

// 支持按需引用
ZmTest.install = function (Vue) {
  Vue.component(ZmTest.name, ZmTest);
};

export default ZmTest;

在packages下新建index.js

在packages/index.js中

import ZmTest from './test/index'

const components = [
    ZmTest
];

const install = function (Vue) {
  if (install.installed) return;
  components.map(component => Vue.component(component.name, component));
};

if (typeof window.Vue !== "undefined" && window.Vue) {
    install(window.Vue);
}

export default {
    install,
    ZmTest
}

在examples下引用示例

在examples/main.js中

// do something...

import ZmUI from '../packages/index'

Vue.use(ZmUI);

// do something...

在examples/views/Home.vue中引用test組件

<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">
    <HelloWorld msg="Welcome to Your Vue.js App"/>
    <zm-test bgColor="blue"></zm-test>
  </div>
</template>

<script>
// @ is an alias to /examples
import HelloWorld from '@/components/HelloWorld.vue'

export default {
  name: 'home',
  components: {
    HelloWorld
  }
}
</script>

啟動程式後,在"http://localhost:8080/#/home"可以看到我們封裝的test組件能正常使用了~

⑤編寫第一個組件的文檔

小白對md的寫法一竅不通...所以先去瞭解了md文件的常見語法,參考文章:如何寫md格式的文檔
此過程分為兩步,第一步使.md文件正常展示,可以看到運行結果以及代碼展示,第二步封裝一個代碼展示的組件,使起可以展開收起,高亮顯示。

編寫文檔

在examples/docs下新建一個test.md文件,隨意寫點介紹,內容如下:

# 測試組件

測試組件是用來測試md文檔是否能在項目中像vue文件一樣正常展示代碼運行結果

運行結果如下
<zm-test bgColor="red"></zm-test>

代碼如下
`<zm-test bgColor="red"></zm-test>`

安裝工具

對md文件需要一個編譯工具--vue-markdown-loader
在本項目下,用命令行工具運行以下命令

npm run vue-markdown-loader -D

修改配置文件

修改vue.config.js,使md文件能像vue文件一樣在項目里展示

// do something...

module.exports = {
    // do something...

    chainWebpack: config => {
        // do something...

        // 使用vue-markdown-loader
        config.module.rule("md")
            .test(/\.md/)
            .use("vue-loader")
            .loader("vue-loader")
            .end()
            .use("vue-markdown-loader")
            .loader("vue-markdown-loader/lib/markdown-compiler")
    },

    // do something...
}

添加路由

在router.js里添加測試文檔的路由

// do something...

export default new Router({
    routes: [
        {
            path: '/',
            name: 'home',
            component: Home
        },
        {
            path: '/about',
            name: 'about',
            component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
        },
        {
            path: '/test',
            name: 'test',
            component: () => import('../docs/test.md')
        }
    ]
})

查看結果

重新啟動程式(註意,只要修改了vue.config.js文件,程式都需要重新啟動),打開"http://localhost:8080/#/test"可以看到文字代碼展示以及一個小紅點在閃爍,代表第一步完美結束~

封裝代碼展示組件

開始第二步。
以上,我們完成了md文件的正常展示,但是我們可以將代碼展示做得更好,封裝一個代碼展示的組件,使示例代碼可以展開收起,代碼高亮等。
感興趣的可以瞭解一下markdown-it
我還在瞭解中,以後會更新上。

⑥讓項目在github上展示

參考文章:https://segmentfault.com/a/1190000017084155

項目已經完成一小半了,我已經迫不及待將它傳到github上記錄下來。
在本地我能直觀地看到我的項目成果了,現在希望能在github上有個演示地址,讓別人也能直觀地看到我的項目展示。通過github文檔及相關資料搜索,我找到瞭解決方案。如下:

安裝工具

在項目下安裝gh-pages工具

npm install gh-pages -D

增加部署命令

package.json文件修改scripts命令

"scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "test:unit": "vue-cli-service test:unit",
    "predeploy": "npm run build",
    "deploy": "gh-pages -d dist"
  },

修改配置

vue.config.js需要修改publicPath配置

module.exports = {
    // do something...
    publicPath: process.env.NODE_ENV === 'production' ? '/project-name/' : '/', //由於我的項目在github上名為zm-ui,所以我的project-name為zm-ui
    // do something...
}

打包部署

在node或cmd運行以下命令

npm run deploy

看到"Published"恭喜你部署成功,接下來可以到github上查看你的項目,是否多了一個分支gh-pages

在github上修改項目設置

在github你的項目下,找到"Settings"下的"GitHub Pages", "Source"選擇"gh-pages branch"保存成功後,就擁有演示地址了~~


 

以上,未完待續...


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...