如何在 npm 上發布 Element Plus 二次封裝組件

在一次開發中,小李接到一個重要的任務:將 Element Plus 中的時間組件根據團隊的獨特需求進行二次封裝。他靈機一動,決定將這個自定義組件打包成一個 npm 包,以便團隊的其他小伙伴們可以快速、方便地使用。接下來,讓我們跟隨小李的腳步,一同探索這個令人興奮的過程吧!

1. 初始化 npm 包

小李首先在一個干凈的文件夾中初始化項目。命令行窗口里,他輕松輸入:

npm init

根據提示填寫包的名稱、版本和描述,最終生成了一個 package.json 文件。

2. 安裝 Vue 3 和 Element Plus

為了讓組件有強大的動力,小李開始安裝 Vue 3 和 Element Plus:

npm install vue
npm install element-plus

3. 創建組件

接下來,小李在項目文件夾中創建一個 src 目錄,并在其中新建一個 index.vue 文件,開始編寫他的時間選擇器組件:

<!-- src/ByDatePicker/index.vue -->
<template><el-date-picker v-model="timeValue" />
</template><script setup name="ByDataPicker">
import { ref, watch } from "vue";const props = defineProps({startTime: {type: String,default: "",},stopTime: {type: String,default: "",},
});const emit = defineEmits(["update:startTime", "update:stopTime"]);
const timeValue = ref([]);const install = () => {let data = [props.startTime || "", props.stopTime || ""];timeValue.value = data;let start = data[0];let stop = data[1];emit("update:startTime", start);emit("update:stopTime", stop);
};
install();
//監聽外部傳遞進來的的數據變化
watch(() => props.startTime,() => {install();}
);
//監聽數據變化
watch(() => timeValue.value,(val) => {if (!val || val === null || val === "") {val = ["", ""];}let start = val[0];let stop = val[1];emit("update:startTime", start);emit("update:stopTime", stop);}
);
</script><style lang="scss" scoped></style>

小提示:記得組件中使用ref watch等關鍵字一定要進行import引入,否則打包后可就要報錯了哦!

4.配置入口文件

為了讓其他人能夠輕松導入這個組件,小李在 src 目錄下創建了一個 index.js 文件:

// src/index.js
import ByDatePicker from "./ByDatePicker/index.vue";export default ByDatePicker;

5. 添加構建工具

小李想要將組件打包成可以在其他項目中使用的格式,決定采用 Vite 作為構建工具。

5.1 安裝 Vite

他快速安裝vite@vitejs/plugin-vue 插件:

npm install --save-dev vite @vitejs/plugin-vue

5.2 創建 Vite 配置文件

小李又新建了一個 vite.config.js 文件,配置如下:

// vite.config.js
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";export default defineConfig({plugins: [vue()],build: {lib: {entry: "src/index.js",name: "ByDatePicker",fileName: (format) => `by-date-picker.${format}.js`,},rollupOptions: {// 確保外部化處理那些你不想打包進庫的依賴external: ["vue", "element-plus"],output: {globals: {vue: "Vue","element-plus": "ElementPlus",},},},},
});

6.添加構建腳本

在 package.json 中添加構建腳本:

"scripts": {"build": "vite build"
}

7.構建組件

終于,小李可以運行構建命令,生成編譯后的組件代碼:

npm run build

編譯完成后,dist 目錄中將出現他的杰作,閃閃發光!

8.更新 package.json

{"name": "by-date-picker","version": "1.0.0",//每次發布前都需要更新版本號否則發布不成功"main": "dist/by-date-picker.umd.js","module": "dist/by-date-picker.es.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","build": "vite build"},"dependencies": {"element-plus": "^2.10.4","vue": "^3.5.18"},"devDependencies": {"@vitejs/plugin-vue": "^5.2.4","vite": "^6.3.5"}
}

9.發布到 npm

最后,小李確保自己已經在 npm 注冊了賬號,并使用命令登錄:

npm login

然后他自信地發布自己的包:

npm publish --access public

小提示:如果你更改了npm的鏡像源,記得添加一個 .npmrc 文件,確保你的發布順利無阻。

.npmrc 文件內容

registry=https://registry.npmjs.org/

經過這一系列步驟,小李終于成功將他的組件發布到了 npm 上,團隊的小伙伴們興高采烈地開始使用這個新工具,開發效率大大提升!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90332.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90332.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90332.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue2使用v-viewer圖片預覽:打開頁面自動預覽,禁止關閉預覽,解決在微信瀏覽器的頁面點擊事件老是觸發預覽初始化的問題

1、安裝&#xff1a; npm install v-viewer viewerjs2、在 main.js 中全局注冊&#xff1a; import Viewer from v-viewer; import viewerjs/dist/viewer.css; Vue.use(Viewer ); //配置項&#xff08;可選&#xff0c;根據需求調整&#xff09; // Vue.use(Viewer, { // d…

開源 Arkts 鴻蒙應用 開發(八)多媒體--相冊和相機

文章的目的為了記錄使用Arkts 進行Harmony app 開發學習的經歷。本職為嵌入式軟件開發&#xff0c;公司安排開發app&#xff0c;臨時學習&#xff0c;完成app的開發。開發流程和要點有些記憶模糊&#xff0c;趕緊記錄&#xff0c;防止忘記。 相關鏈接&#xff1a; 開源 Arkts …

無線通信資源分配相關算法

1.Maximum Clique First (MCF)是一種啟發式圖著色算法&#xff08;heuristic graph coloring algorithm&#xff09;&#xff0c;它的核心思想是&#xff1a;優先為圖中最大團&#xff08;maximum clique&#xff09;中的頂點分配不同的顏色&#xff0c;然后再依次為其他頂點上…

Kafka監控體系搭建:基于Prometheus+JMX+Grafana的全方位性能觀測方案

為什么需要Kafka監控監控架構概述步驟一&#xff1a;部署JMX Exporter 1.1 下載JMX Agent1.2 創建指標暴露配置 步驟二&#xff1a;配置Kafka集成JMX 2.1 啟動參數配置2.2 驗證指標暴露 步驟三&#xff1a;配置Prometheus采集 3.1 修改Prometheus配置3.2 驗證數據采集 步驟四&a…

stack 和 queue

目錄 一、stack 1.1 stack 的介紹 1.2 stack的使用 1&#xff09;最小棧 2&#xff09;棧的彈出壓入序列 3&#xff09;逆波蘭表達式求值 1.3 stack 的模擬使用 二、queue 2.1 queue的介紹 2.2 queue的使用 2.3 queue的模擬使用 三、容器適配器 3.1 什么是容器適配…

sqlsuger 子表獲取主表中的一個字段的寫法

在使用 SQL 語言進行數據庫操作時&#xff0c;如果你想要從子表獲取數據&#xff0c;同時關聯到主表中的一個字段&#xff0c;通常我們會使用 SQL 的 JOIN 語句。JOIN 語句允許你通過一個或多個共同的字段將兩個或多個表連接起來。這里我將展示幾種常見的 JOIN 類型&#xff08…

Docker配置Gitlab-runner實現自動化容器化部署前端項目

疊甲前言 本文僅作為個人學習GitLab的CI/CD功能記錄&#xff0c;不適合作為專業性指導&#xff0c;如有紕漏&#xff0c;煩請君指正。 云主機注冊Gitlab Runner 自動化構建部署的弊端 在前一文中&#xff0c;我們在Linux云主機上注冊了Gitlab-runner, 每次在gitlab流水線上發…

MySQL介紹和MySQL包安裝

文章目錄MySQL介紹和安裝1.MySQL介紹1.1 MySQL 的定義1.2 MySQL 的特點1.3 MySQL 的應用領域1.4 MySQL 的存儲引擎1.5 MySQL 的架構1.6 MySQL 的優勢和局限性1.7 MySQL 的未來發展趨勢2.MySQL安裝2.1 主機初始化2.1.1 設置網卡名2.1.2 設置ip地址2.1.3 配置鏡像源2.1.4 關閉防火…

J2EE模式---視圖助手模式

視圖助手模式基礎概念視圖助手模式&#xff08;View Helper Pattern&#xff09;是一種結構型設計模式&#xff0c;其核心思想是將視圖層中復雜的邏輯提取到獨立的助手類中&#xff0c;使視圖代碼更加簡潔、易于維護。視圖助手通常提供一系列工具方法&#xff0c;用于處理格式化…

開源的語音合成大模型-Cosyvoice使用介紹

1 模型概覽 CosyVoice 是由阿里巴巴達摩院通義實驗室開發的新一代生成式語音合成大模型系列&#xff0c;其核心目標是通過大模型技術深度融合文本理解與語音生成&#xff0c;實現高度擬人化的語音合成體驗。該系列包含初代 CosyVoice 及其升級版 CosyVoice 2.0&#xff0c;兩者…

深度學習·CLIP

CLIP 數據大小 4億個文本-圖像對&#xff0c;而且是高質量的 預訓練方法 Text encoder“The text sequence is bracketed with [SOS] and [EOS] tokens and the activations of the highest layer of the transformer at the [EOS] token are used as the feature representati…

美光MTFC8GAKAJCN-4M_IT型eMMC應用介紹

1.1 芯片訂購信息美光MTFC8GAKAJCN-4M_IT型eMMC&#xff0c;容量8GB&#xff0c;153-ball VFBGA封裝。1.2 eMMC料號含義2.1 特性?多媒體卡&#xff08;MMC&#xff09;控制器和NAND閃存?153球FBGA封裝&#xff08;符合RoHS標準&#xff0c;環保封裝&#xff09;?VCC&#xf…

面向對象分析與設計40講(6)設計原則之開閉原則

文章目錄 一、概念 二、示例(C++ 實現) 1. 違反開閉原則的示例 2. 遵循開閉原則的示例 一、概念 開閉原則(Open-Closed Principle,OCP)是面向對象設計中的重要原則,由 Bertrand Meyer 提出,核心思想可以概括為:對擴展開放,對修改關閉。 具體來說,一個軟件實體(如類…

[Linux入門] Linux 網絡設置入門:從查看、測試到配置全攻略

目錄 一、查看網絡信息&#xff1a;了解你的網絡狀態 1??核心工具&#xff1a;ip命令&#xff08;替代ifconfig&#xff09; <1> 基本語法&#xff1a; <2> 實用操作示例&#xff1a; 2??查看路由表&#xff1a;route命令 3??查看網絡連接狀態&#xf…

TyFlow:三維領域的粒子特效革命者

在動態模擬與視覺特效領域&#xff0c;??TyFlow?? 作為 3ds Max 中誕生的一款革命性粒子系統插件&#xff08;后來也支持獨立開發&#xff09;&#xff0c;正在徹底改變藝術家們創作復雜動力學效果的方式。它以其無與倫比的靈活性、強大的計算能力和開創性的技術理念&#…

本地一鍵部署 Spark-TTS,支持Mac和Windows

Spark-TTS是一個文本轉語音(TTS)的項目&#xff0c;零樣本語音克隆逼真&#xff0c;多語言支持&#xff0c;語音參數可控。使用魔當(LM Downloader)&#xff0c;可以實現Spark-TTS的本地一鍵部署。 注意 如果使用Windows&#xff0c;推薦用NVIDIA顯卡&#xff0c;生成速度較快…

傳統時間:Date日期類,SimpleDateFormat,Calendar

目錄DateSimpleDateFormatCalendarDate 代表的是日期和時間 常見構造器和方法&#xff1a; 構造器說明public Date()創建一個Date對象&#xff0c;代表的是系統當前此刻日期時間public Date(long time)把時間毫秒值轉換成Date日期對象 常見方法說明public long getTime()返…

linus 環境 tomcat啟動日志分隔

1.定義可執行文件&#xff1a;tomcatlog9090.sh fsize$(ls -l /data/tomcat-cms_9090/logs/catalina.out | cut -d -f 5)if [ $fsize -gt 40960000 ]; thenextdatedate %Y_%m_%d_%k_%Mdatapath/data/tomcat-cms_9090/logscd /data/tomcat-cms_9090/logscp catalina.out catali…

解密 Base64 編碼:從原理到應用的全面解析

在網絡傳輸、數據存儲的世界里&#xff0c;Base64 編碼如同一座隱形的橋梁&#xff0c;默默承擔著重要的角色。當你發送郵件附件、在網頁中嵌入圖片&#xff0c;或是處理一些特殊格式的數據時&#xff0c;都可能在不知不覺中與它打交道。那么&#xff0c;Base64 編碼究竟是什么…

C++實現Adam與RMSProp優化算法

C++中實現Adam和RMSProp優化算法 以下是一些關于C++中實現Adam和RMSProp優化算法的實用示例和資源,涵蓋不同場景和應用。由于篇幅限制,完整代碼,但提供關鍵實現片段、庫使用方法和學習資源。 基礎Adam優化器實現 Adam優化器實現 #include <vector> #include <c…