主頁 > 企業開發 > Vue3 企業級優雅實戰 - 組件庫框架 - 11 組件庫的打包構建和發布

Vue3 企業級優雅實戰 - 組件庫框架 - 11 組件庫的打包構建和發布

2023-02-11 07:53:23 企業開發

回顧第一篇文章中談到的組件庫的幾個方面,只剩下最后的、也是最重要的組件庫的打包構建、本地發布、遠程發布了,

1 組件庫構建

組件庫的入口是 packages/yyg-demo-ui,構建組件庫有兩個步驟:

  1. 添加 TypeScript 的組態檔: tsconfig.json
  2. 添加 vite.config.ts 組態檔,配置打包方式,

1.1 tsconfig.json

packages/yyg-demo-ui 中添加 tsconfig.json 檔案:

{
  "compilerOptions": {
    "target": "ESNext",
    "useDefineForClassFields": true,
    "module": "ESNext",
    "moduleResolution": "Node",
    "strict": true,
    "jsx": "preserve",
    "sourceMap": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "esModuleInterop": true,
    "lib": ["ESNext", "DOM"],
    "skipLibCheck": true,
    "declaration": true,
    "baseUrl": "."
  },
  "include": ["../**/*.ts", "../**/*.d.ts", "../**/*.tsx", "../**/*.vue"],
  "exclude": ["../**/node_modules/"]
}

1.2 vite.config.ts

打包構建時需要提取型別定義,可以使用 vite 插件 vite-plugin-dts,首先在 packages/yyg-demo-ui 中添加該插件為開發依賴:

pnpm install vite-plugin-dts -D

然后創建 vite.config.ts 檔案:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import * as path from 'path'
import VueJsx from '@vitejs/plugin-vue-jsx'
import viteDts from 'vite-plugin-dts'

export default defineConfig({
  plugins: [
    vue(),
    VueJsx(),
    viteDts({
      insertTypesEntry: true,
      staticImport: true,
      skipDiagnostics: true
    })
  ],
  build: {
    lib: {
      entry: path.resolve(__dirname, './index.ts'),
      name: 'yyg-demo-ui',
      fileName: format => `yyg-demo-ui.${format}.js`
    },
    outDir: path.resolve(__dirname, '../../lib'),
    rollupOptions: {
      external: ['vue'],
      output: {
        globals: {
          vue: 'Vue'
        }
      }
    }
  }
})

1.3 package.json

packages/yyg-demo-ui/package.json 中添加打包 scripts,上面的配置指定了打包輸出目錄為專案根目錄下的 lib,每次打包前希望先洗掉該目錄,可以使用 rimraf,在該模塊中先安裝 rimraf

pnpm install rimraf -D

package.json 中添加 script:

"scripts": {
  "build": "rimraf ../../lib && vue-tsc --noEmit && vite build"
},

執行 pnpm run build 開始打包,

image

打包成功后,專案根目錄下生成 lib 目錄,包括 ES 規范和 UMD 規范和型別定義檔案,

2 組件庫的本地發布

2.1 根目錄 package.json scripts

到目前為止,整個組件庫有很多個包,每個包都有一些 scripts:

cli:
	- gen: 創建新組件
docs:
	- dev:本地開發組件庫檔案
	- build:打包構建組件庫檔案
	- serve:預覽組件庫檔案打包
example:
	- dev:dev、dev:uat、dev:prod:本地開發 example
	- build:dev、build:uat、build:prod:打包構建 example
	- preview:預覽 example 打包構建后的結果
packages/yyg-demo-ui:
	- build:打包構建組件庫

上面這些 scripts 都需要進入到對應的目錄執行,這樣比較麻煩,所以可以將這些命令匯總到根目錄的 package.json 中,這樣無論是哪個模塊的 scripts,都從根目錄執行即可,

"scripts": {
  "dev:dev": "pnpm run -C example dev:dev",
  "dev:uat": "pnpm run -C example dev:uat",
  "dev:prod": "pnpm run -C example dev:prod",
  "build:dev": "pnpm run -C example build:dev",
  "build:uat": "pnpm run -C example build:uat",
  "build:prod": "pnpm run -C example build:prod",
  "preview:example": "pnpm run -C example preview",
  "build:lib": "pnpm run -C packages/yyg-admin-ui build",
  "docs:dev": "pnpm run -C docs dev",
  "docs:build": "pnpm run -C docs build",
  "docs:preview": "pnpm run -C docs serve",
  "gen:component": "pnpm run -C cli gen",
  "lint": "eslint \"{cli,packages,docs,example}/**/*.{js,ts,vue,jsx,tsx}\" --fix"
},

通過 -C 指定 scripts 的位置,

2.2 安裝本地私服 verdaccio

幾個月前程式員優雅哥分享過使用 Docker 搭建 Nexus3 私服,Nexus3 相對重量級,如果在本地測驗,使用 verdaccio 即可,verdaccio 算得上本地的一款輕量級私服了,

  1. 安裝 verdaccio

verdaccio 通常是全域安裝(-g),在咱們組件庫中為了大家 clone 代碼操作方便,便將其安裝到根目錄的開發依賴中:

pnpm install verdaccio -D -w
  1. 啟動 verdaccio

在根目錄 package.jsonscripts 中添加啟動 verdaccio 的命令

"start:verdaccio": "pnpm verdaccio",

這一步可省略,只因為我用 WebStorm,添加到 scripts中不用每次輸入命令,能偷懶的必須偷懶,

執行 start:verdaccio 后,控制臺會提示訪問地址 http://localhost:4873/ ,在瀏覽器中訪問該路徑,

image

  1. 創建用戶、登錄

在瀏覽器中按照界面提示創建用戶、登錄,在命令列中執行下列命令創建用戶:

npm adduser --registry http://localhost:4873/

依次輸入用戶名、密碼、郵箱,回車便成功創建賬號并自動登錄上,

使用剛才輸入的用戶名和密碼,在瀏覽器中登錄,登錄前重繪瀏覽器,

2.3 本地發布

在發布前,需要修改專案根目錄 package.json 的幾個地方:

  1. 添加如下配置,指定 private 為 false、設定 main、module、types、files等屬性:
{
  ...
  "private": false,
  "type": "module",
  "main": "./lib/yyg-demo-ui.umd.js",
  "module": "./lib/yyg-demo-ui.es.js",
  "types": "./lib/yyg-demo-ui/index.d.ts",
  "files": [
    "./lib",
    "package.json",
    "README.md"
  ],
  "exports": {
    ".": {
      "require": "./lib/yyg-demo-ui.umd.js",
      "import": "./lib/yyg-demo-ui.es.js"
    }
  },
  ...
}
  1. 自己修改 author
  2. 在 scripts 中添加發布組件庫的命令:
"pub:local": "pnpm publish --registry http://localhost:4873/",
  1. 在專案根目錄下添加一份 README.md 檔案,

在發布前,如果代碼納入 git 管理,需要提交代碼,再執行 pnpm run pub:local,顯示如下資訊則發布成功:

image

重繪瀏覽器,可以看到剛才發布的組件庫,

3 測驗使用組件庫

3.1 創建新專案

使用 vite 或 yyg-cli 創建新的 vue 專案:

pnpm create vite

進入新創建的 vue 專案,pnpm install 安裝依賴,依賴安裝成功后先執行 pnpm run dev 測驗專案是否正常運行,

3.2 安裝依賴

由于咱們的組件庫依賴于 element-plus,故首先安裝element-plus:

pnpm install element-plus

由于安裝咱自己的組件庫需要指定 registry,registry 變了,pnpm 需要重新執行 install:

pnpm install --registry http://localhost:4873/

最后指定 registry 安裝咱們的組件庫:

pnpm install yyg-demo-ui --registry http://localhost:4873/

3.3 引入組件庫

在 main.ts 中引入 element-plus 和 yyg-demo-ui:

...
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import YygDemoUi from 'yyg-demo-ui'

createApp(App)
    .use(ElementPlus)
    .use(YygDemoUi)
    .mount('#app')

在 App.vue 中使用組件庫中的 foo 組件:

<yyg-foo msg="測驗組件庫"></yyg-foo>

啟動專案,測驗運行效果,從瀏覽器和瀏覽器 console 中可以看出一切正常,這樣組件庫便成功發布了,

4 其他說明

  1. 發布到 npmjs 與本地發布的操作一樣,registry 需要指定為 https://registry.npmjs.org/
  2. 無論是發布到本地還是 npmjs,如果提示無權限,都可以使用 npm login 先登錄:
npm login --registry http://xxxxxx
  1. 再次發布前需要修改版本號,可以使用如下 npm 命令修改版本號:
// 最后一位(patch)版本號加1
npm version patch

// 中間一位(minor)版本號加1
npm version minor

// 第一位(major)版本號加1
npm version major

組件庫的打包構建和發布,咱就聊到這里,

感謝閱讀本文,如果本文給了你一點點幫助或者啟發,還請三連支持一下,了解更多內容工薇號“程式員優雅哥”,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/543575.html

標籤:其他

上一篇:前端開發問題整理

下一篇:Cnblogs博客皮膚開發除錯最佳方案

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more