從零開始發布你的第一個npm插件包并在多項目中使用

引言

????????在開源的世界里,每個人都有機會成為貢獻者,甚至是創新的引領者。您是否有過這樣的想法:開發一個解決特定問題的小工具,讓她成為其他開發者手中的利器?今天,我們就來一場實戰訓練,學習如何將你的代碼打包成npm插件包,發布到全球最大的JS包管理平臺–npm上。讓全世界的其他開發者受益于你的智慧吧。
???????? 我將自己編寫的常用組件,工具模塊,指令,常用的api庫,框架等代碼為了更好的復用,靈活的管理,上傳到了npm庫中進行了管理,更新,迭代。

準備工作

  1. 準備好node.js環境>>>>
  2. 創建一個干凈的項目環境>>>>防止打包組件過程中受到其package.json的干擾 vue create 項目名稱

步驟一、目錄文件創建、組件寫入、本地運行自測

一、 根據個人習慣,創建一個package文件,用于存放你的組件及其API方法。從零開始發布你的第一個npm插件包
目錄介紹
從零開始發布你的第一個npm插件包并使用
二、封裝一個簡單組件demo,下面為基于elementUI封裝的一個開關組件。

<template><div class="custom-switch" @click="switchClick"><div :class="isCenter?'switch-box':''" v-loading="loading">開關 <el-switch class="switch-item" v-bind="$attrs"></el-switch></div></div>
</template><script>
export default {name: "hsk-switch",props: {loading: {default: false,type: Boolean,},isCenter: {default: false,type: Boolean,},},data() {return {};},created() {},mounted() {},methods: {switchClick() {// 如果禁用和loading狀態,不emit給父組件if (this.$attrs.disabled || this.loading) {return;}this.$emit("switchClick", this.$attrs.value);},},
};
</script>
<style scoped>
.custom-switch{width: 40px;
}
.switch-box {display: flex;display: -webkit-flex;justify-content: center;align-items: center;
}
</style>
<!-- <template><div @click="switchClick"><el-switchv-model="localValue":active-value="activeValue":inactive-value="inactiveValue":active-color="activeColor":inactive-color="inactiveColor":disabled="disabled"@change="handleChange"></el-switch></div>
</template><script>
export default {name: "hsk-switch",props: {value: {type: [String, Number, Boolean],default: false,},activeValue: {type: [String, Number, Boolean],default: true,},inactiveValue: {type: [String, Number, Boolean],default: false,},activeColor: {type: String,default: "#13ce66",},inactiveColor: {type: String,default: "#ff4949",},disabled: {type: Boolean,default: false,},},data() {return {localValue: this.value,};},watch: {value: {handler(newVal) {this.localValue = newVal;},immediate: true,},},methods: {switchClick(){this.$emit('switchlick', this.$attrs.value)},handleChange(newStatus) {// 當開關發生變化時,更新本地狀態this.localValue = newStatus;this.$emit("change", this.localValue);},},
};
</script><style scoped>
/* 可以添加樣式進行定制 */
</style> -->

三、封裝好組件后,進行本地項目調用查看是否可以使用。

<template><div><HSKSwitch v-model="flg" :isCenter="false" @switchClick="handleStatusChange" :active-value="1":inactive-value="0"></HSKSwitch></div>
</template><script>
import HSKSwitch from "../package/hsk-switch/index.vue"
export default {name:"hskSwitch",components:{HSKSwitch},data(){return {flg:1,}},methods:{//開關handleStatusChange(){console.log("被執行了")// this.switchLoading = true// 這里就可以調用接口,接口成功后修改值和loading狀態setTimeout(() => {this.flg = !this.flg ? 1 : 0// this.switchLoading = false}, 100)}}
}
</script><style></style>

本地項目調用預覽效果:
從零開始發布你的第一個npm插件包并在多項目中使用

步驟二、組件封裝好自測通過進行組件的批量導出

四、在package目錄下創建一個index.js文件,用于注冊或批量注冊已封裝好的組件和方法。
從零開始發布你的第一個npm插件包并在多項目中使用
代碼

//package/index.js
import HskTable from "./hsk-table/index.vue"; // table組件
import HSKPagination from "./hsk-pagination/index.vue"; // table下的分頁組件
import HSKSwitch from "./hsk-switch/index.vue"  //開關組件
import HSKDialog from "./hsk-dialog/index.vue"
import HSKSelect from './hsk-select/index.vue'
import HSKTreeSel from './hsk-treeSelect/index.vue'
import HSKTime from './hsk-time/index.vue'
import HSKAddressSel from './hsk-addressSel/index.vue'
// import * as hskMsgbox from "./pop-up.js"
const coms = [HskTable,HSKPagination,HSKSwitch,HSKDialog,HSKSelect,HSKTreeSel,HSKTime,HSKAddressSel]; // 將來如果有其它組件,都可以寫到這個數組里// 批量組件注冊
const install = function (Vue) {coms.forEach((com) => {Vue.component(com.name, com);});
};
// 判斷是否是直接引入文件
if (typeof window !== "undefined" && window.Vue) {install(window.Vue);
}
export default {// 導出的對象必須具有 install,才能被 Vue.use() 方法安裝install,// 以下是具體的組件列表HskTable,HSKPagination,HSKSwitch,HSKDialog,// hskMsgbox,HSKSelect,HSKTreeSel,HSKTime,HSKAddressSel
};

步驟三、改造組件所在項目中的package.json文件,并執行打包

一、創建hskui打包存放文件夾,用于存放打包組件庫存放的位置
從零開始發布你的第一個npm插件包并在多項目中使用

二、package.json配置打包命令

"hsk-ui": "vue-cli-service build --target lib ./src/package/index.js --name hskui --dest hskui"

參數說明:

target lib : 關鍵字 指定打包的目錄
name : 打包后的文件名字
dest : 打包后的文件夾的名稱
從零開始發布你的第一個npm插件包并在多項目中使用

三、執行打包命令

  npm run hsk-ui

打包成功:
從零開始發布你的第一個npm插件包并在多項目中使用
從零開始發布你的第一個npm插件包并在多項目中使用

步驟四、新建需要上傳文件夾并初始化package.json文件

一、新建一個自己需要上傳組件包的文件夾(hskcomTest),可在打包后存放一些其他打包不進去的文件。將執行打包命令生成的文件夾內容復制到hskcomTest文件夾中。進入hskcomTest 目錄執行npm init -y,初始化一個package.json文件。

	npm init -y

初始化過后的文件:
在這里插入圖片描述
參數說明

description : 組件包描述信息。
keywords : 字符串數組,便于用戶在npm上搜索到我們的項目。
version : 項目版本號。
name : package.json文件中最重要的就是nameversion字段,這兩項是必填的。名稱和版本一起構成一個標識符,該標識符被認為是完全唯一的。對包的更改應該與對版本的更改一起進行。name必須是字符串,不能以.或_開頭,不能有大寫字母,因為名稱最終成為URL的一部分因此不能包含任何非URL安全字符。 npm官方建議我們不要使用與核心節點模塊相同的名稱。不要在名稱中加js或node。如果需要可以使用engines來指定運行環境。
main : 項目文件入口文件,自動生成,不需要改動。

二、修改打打包上傳地址devtestpreprod環境上傳地址,及其打包命令。在這里插入圖片描述
三、配置好上傳包的package.json后,進行將原打包的文件及打包不進來的文件復制放入到hskcomTest文件夾中
在這里插入圖片描述

步驟五、添加登錄后端人員給的npm私服賬號和鏡像地址

一、

npm login

從零開始發布你的第一個npm插件包并在多項目中使用

步驟六、發布

在組件打包后的文件夾中執行,進行上傳組件或者你的插件包

npm publish --registry ”Nexus的鏡像地址“

但是我當前已經在需上傳的組件包中使用了如下配置
從零開始發布你的第一個npm插件包并在多項目中使用
所以我只需要執行npm run hsk-ui:dev命令即可

npm run hsk-ui:dev`

打包上傳成功提示如下
從零開始發布你的第一個npm插件包并在多項目中使用
npm 私服上即可看到
從零開始發布你的第一個npm插件包并在多項目中使用

步驟七、安裝并使用已發布包

一、安裝
因為我是用的是私服的npm組件庫,所以需要輸入用戶名和密碼并指定url的地址,如果是公共服,那則不需要私服地址。

npm install -u 用戶名 -p 密碼 --registry=http://xxx.xxx.xx.xx:xxx/repository/npm-group-dev/ hsk-ui@1.0.1-SNAPSHOT

從零開始發布你的第一個npm插件包并在多項目中使用
二、安裝完成后,main.js中全局引入。

//引入hsk組件
import hskui from "hsk-ui"
import "hsk-ui/styles/hskui.css"
//引入hsk方法
import { hskMsgbox } from 'hsk-ui/commonUtils'

三、頁面中使用自己剛剛定義的組件

<hsk-switch></hsk-switch>

從零開始發布你的第一個npm插件包并在多項目中使用
效果:
從零開始發布你的第一個npm插件包并在多項目中使用

結語

????????希望這篇指南能激發你發布自己npm插件包的熱情,讓編程之旅更加精彩!如果你有任何疑問或需要進一步的幫助,請隨時留言,我們共同探討。加油,未來的npm之星!🌟

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

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

相關文章

【ubuntu】增加samba服務和文件夾

發現ai -server的ubuntu機器無法git clone 下來github的文件所以 使用samba 連接到linux的文件夾proj然后在我的windows上git clone 即可。安裝samba Creating config file /etc/samba/smb.conf with new version Setting up libcephfs2 (17.2.7-0ubuntu0.22.04.1) ... Setting…

漏洞挖掘 | 驗證碼繞過

還是老規矩&#xff0c;開局一個登錄框&#xff0c;中途漏洞全靠舔&#xff0c;先來研究一下這個登錄窗口 很好&#xff0c;發現有驗證碼登錄&#xff0c;先測試測試能不能并發 看來沒有&#xff0c;只成功發送了兩條&#xff0c;再看看驗證碼是不是4位 很好&#xff0c;是4位。…

UE5-AI

AI角色 角色控制器 AI角色必須要一個角色控制器 角色控制器最基本只需要執行行為樹&#xff0c;在EventOnPossess后runBehaviorTree 如果要的是一個角色&#xff0c;可以創建一個Character&#xff0c;在類默認設置中可以找到 Pawn->AIControllerClass&#xff0c;在這里…

Android 架構組件面試問答

1. 什么是 Android Architecture Components&#xff1f; 答&#xff1a; 組件是一組庫&#xff0c;可幫助您設計健壯、可測試且可維護的應用程序。它們提供了一種清晰且慣用的方式來使用 REST API。這些組件包括 Room、ViewModel、LiveData 等。 2. 什么是LiveData&#xff…

Java接口的變更過程

Java 接口相信所有學過 Java 的人一定都知道&#xff0c;而且 99% 的人一定都背過這個面試題&#xff1a;Java 接口和抽象類的區別是什么&#xff1f;答案都是什么接口方法不能有實現&#xff0c;都是抽象的&#xff0c;接口的方法都默認為 public 修飾等等之類的&#xff0c;這…

推箱子小游戲C++

推箱子是一款經典的益智游戲&#xff0c;玩家需要通過推動箱子來達到特定的目標。在C中實現這樣的小游戲需要考慮游戲邏輯、用戶輸入、圖形界面&#xff08;如果需要的話&#xff09;以及可能的關卡設計。 下面是一個簡單的推箱子游戲的實現框架&#xff1a; 定義游戲環境 創建…

DSP問題:CCS更改工程名導入報錯

1、問題現象 復制一個工程出來后&#xff0c;修改版本號&#xff0c;重新導入工程后報錯。 顯示項目描述無效。 2、問題原因 由于CCS無法通過工程描述中找到指定名字文件夾。使用記事本打開.project文件&#xff0c;里面的描述還是以前的文件夾名&#xff0c;所以導入時報…

Spring Boot 開發 -- 靜態資源配置詳解

一、引言 在開發Web應用程序時&#xff0c;靜態資源的管理和配置是一個重要的環節。Spring Boot框架為開發者提供了便捷的靜態資源配置方式&#xff0c;使得我們可以輕松地管理如HTML、CSS、JavaScript、圖片等靜態資源。本文將詳細介紹如何在Spring Boot項目中配置和管理靜態…

Innodb Buffer Pool緩存機制(三)Innodb Buffer Pool內部組成

一、控制塊緩存頁 Buffer Pool中默認的緩存頁大小和在磁盤上默認的頁大小是一樣的&#xff0c;都是16KB。為了更好的管理這些在Buffer Pool中的緩存頁&#xff0c;InnoDB為每一個緩存頁都創建了一些所謂的控制信息&#xff0c;這些控制信息包括該頁所屬的表空間編號、頁號、緩存…

Android基礎-AndroidManifest.xml詳解

在Android開發中&#xff0c;AndroidManifest.xml 文件是一個至關重要的組成部分&#xff0c;它位于應用的根目錄的 app/src/main/ 文件夾下。這個文件提供了Android系統和其他應用所需的所有關于應用的元數據信息。以下是對 AndroidManifest.xml 文件的詳細解析。 1. 文件結構…

[Vulfocus解題系列]spring 命令執行(CVE-2022-22947)

環境部署 使用docker部署環境 漏洞等級&#xff1a;高危 3 月 1 日&#xff0c;VMware 官方發布安全公告&#xff0c;聲明對 Spring Cloud Gateway 中的一處命令注入漏洞進行了修復&#xff0c;漏洞編號為CVE-2022-22947 Spring官方發布 漏洞描述 使用 Spring Cloud Gate…

javaweb—Vue

重點為&#xff1a;雙向數據綁定。 框架&#xff1a;是一個半成品軟件&#xff0c;是一套可重用的、通用的、軟件基礎代碼模型&#xff0c;基于框架進行開發&#xff0c;更加快捷&#xff0c;更加高效。 Vue快速入門 基礎框架&#xff1a; <!DOCTYPE html> <html lan…

【Python Cookbook】S01E20 fnmatch 模塊做字符串匹配

目錄 問題解決方案討論 問題 在不同的操作系統下&#xff0c;怎樣做字符串匹配&#xff1f; 解決方案 fnmatch() 模塊提供兩個函數&#xff0c;fnmatch() 以及 fnmatchcase() 可以用來執行做這樣的匹配。 from fnmatch import fnmatch, fnmatchcasematch_res fnmatch(foo.…

vue路由緩存

vue路由緩存 在業務場景中有時候需要頁面緩存不清空&#xff0c;那么就需要保留緩存(include為需要緩存&#xff0c;而exclude為不緩存&#xff0c;且優先級大于include) <KeepAlive> 是一個內置組件&#xff0c;它的功能是在多個組件間動態切換時緩存被移除的組件實例…

【java 為什么說 Synchronized 是非公平鎖?】

文章目錄 概要1. 非公平鎖的定義2. synchronized 作為非公平鎖的原因3. 非公平鎖的特點4. 如何實現公平鎖總結 概要 在Java中&#xff0c;synchronized 關鍵字用于實現同步&#xff0c;以確保在多線程環境下對共享資源的訪問是線程安全的。然而&#xff0c;synchronized 實現的…

03-3.1.2 棧的順序存儲的實現

&#x1f44b; Hi, I’m Beast Cheng&#x1f440; I’m interested in photography, hiking, landscape…&#x1f331; I’m currently learning python, javascript, kotlin…&#x1f4eb; How to reach me --> 458290771qq.com 喜歡《數據結構》部分筆記的小伙伴可以訂…

郵件地址搜索軟件

易郵件地址搜索大師  一、易郵件地址搜索大師特色 — 易郵件地址搜索大師是一款搜索郵件地址和手機號碼的軟件&#xff0c;可以按整站搜索&#xff0c;也可以按關鍵詞搜索。使用方法非常簡單和方便。 — “整站搜索”可以搜索有很多郵件地址的單一網站&#xff0c;主要用于…

Technart電動螺絲刀TN101控制器維修

Technart電動螺絲刀以其高效、穩定和精確的扭矩控制而聞名。然而&#xff0c;即使優質的產品&#xff0c;在長時間的使用下&#xff0c;也可能會出現TECHNART電動螺母扳手控制器故障。 常見故障及維修方法 1. 控制器不工作 癥狀&#xff1a;電動螺絲刀無法啟動&#xff0c;或啟…

Python怎么染色:深入探索Python中的文本和圖形著色技巧

Python怎么染色&#xff1a;深入探索Python中的文本和圖形著色技巧 在Python編程中&#xff0c;染色或著色不僅限于文本輸出&#xff0c;還涉及圖形、圖像甚至數據可視化的多個層面。本文將帶你走進Python的染色世界&#xff0c;從四個方面、五個方面、六個方面和七個方面詳細…

【WEEK15】 【DAY2】【DAY3】Email Tasks【English Version】

Continuation from【WEEK15】 【DAY1】Asynchronous Tasks【English Version】 Contents 17. Asynchronous, Timed, and Email Tasks17.2. Email Tasks17.2.1. Email sending is also very common in our daily development, and Springboot provides support for this as well…