發布npmjs組件庫

一.初始化項目

1.用Vite創建空項目

2.安裝打包與聲明文件插件

pnpm i -D vite-plugin-dts sass

二.首先修改項目內容

// src\index.ts
import { type App } from 'vue';
import oneComponent from "./components/oneComponent/index.vue";
import twoComponent from "./components/twoComponent/index.vue";export { oneComponent,twoComponent } //實現按需引入*
oneComponent.name='oneComponent';
twoComponent.name='twoComponent';
const components = [oneComponent,twoComponent];const install = (app: App) => {components.forEach((component) => {app.component(component.name || component.__name || 'unknow', component);});
};
export type { twoComponentOption, twoComponentProps } from './types'export default { install } // 批量的引入*node
// main.ts
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'createApp(App).mount('#app')
// vite/plugins/commponent.ts import Components from 'unplugin-vue-components/vite'
export default () => {return Components({ //自動導入 components下的組件dirs: ['src/components'],//自動在types下新建components.d.ts文件并聲明公共組件類型dts: 'src/types/components.d.ts',})
} 
// vite/plugins/index.tsimport vue from '@vitejs/plugin-vue';
import commponents from './commponent' 
import dts from 'vite-plugin-dts';
export default (): [] => {const vitePlusgins: any = [];vitePlusgins.push(vue({script:{defineModel: true}}));vitePlusgins.push(dts({tsconfigPath:'./tsconfig.app.json',include: ['src/**/*.ts','src/**/*.vue'],exclude:['src/types/components.d.ts'],·outDir: 'dist/types',insertTypesEntry: true,rollupTypes:true}));vitePlusgins.push(commponents()); return vitePlusgins
}

//vite.config.ts
import { type ConfigEnv, defineConfig, type UserConfig } from 'vite'
import createPlugins from './vite/plugins'
import path from 'path'
// https://vite.dev/config/
export default defineConfig(({  }: ConfigEnv): UserConfig => {// const env = loadEnv(mode, process.cwd());return {plugins: createPlugins(),resolve: {alias: {'@': path.resolve(__dirname,'src')}},build:{lib:{entry: path.resolve(__dirname,'src/index.ts'),name: 'MyVue3Lib',fileName: (format) => `my-vue3-lib.${format}.js`},rollupOptions: {external: ['vue'],output: {globals: {vue: 'Vue'}}}}}
})
// package.json{"name": "my-vue3-lib-comlibrary","version": "0.0.2","type": "module","main": "./dist/my-vue3-lib.umd.js","module": "./dist/my-vue3-lib.es.js","types": "./dist/types/index.d.ts","files": ["dist"],"exports": {".": {"types": "./dist/types/index.d.ts","import": "./dist/my-vue3-lib.es.js","require": "./dist/my-vue3-lib.umd.js"},"./dist/my-vue3-lib.css": "./dist/my-vue3-lib.css"},"scripts": {"dev": "vite","build": "vue-tsc -b && vite build","preview": "vite preview","pub": "npm run build && npm publish"},"peerDependencies": {"vue": "^3.5.18"},"dependencies": { "sass": "^1.90.0","vue": "^3.5.18"},"devDependencies": {"@types/node": "^24.2.1","@vitejs/plugin-vue": "^6.0.1","@vue/tsconfig": "^0.7.0","typescript": "~5.8.3","unplugin-auto-import": "^20.0.0","unplugin-vue-components": "^29.0.0","vite": "^7.1.2","vite-plugin-dts": "^4.5.4","vue-tsc": "^3.0.5"}
}
// tsconfig.app.json{"extends": "@vue/tsconfig/tsconfig.dom.json","compilerOptions": {"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",/* Linting */"strict": true,"noUnusedLocals": true,"noUnusedParameters": true,"erasableSyntaxOnly": true,"noFallthroughCasesInSwitch": true,"noUncheckedSideEffectImports": true,"baseUrl": ".","allowJs": true,"paths": {"@/*": ["src/*"]},"allowSyntheticDefaultImports": true,},"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"]
}

// tsconfig.node.json
{"compilerOptions": {"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo","target": "ES2023","lib": ["ES2023"],"module": "ESNext","skipLibCheck": true,/* Bundler mode */"moduleResolution": "bundler","allowImportingTsExtensions": true,"verbatimModuleSyntax": true,"moduleDetection": "force","noEmit": true,/* Linting */"strict": true,"noUnusedLocals": true,"noUnusedParameters": true,"erasableSyntaxOnly": true,"noFallthroughCasesInSwitch": true,"noUncheckedSideEffectImports": true},"include": ["vite.config.ts"]
}
// tsconfig.ts
{"files": [],"references": [{ "path": "./tsconfig.app.json" },{ "path": "./tsconfig.node.json" }]
}

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

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

相關文章

【C語言16天強化訓練】從基礎入門到進階:Day 2

🔥個人主頁:艾莉絲努力練劍 ?專欄傳送門:《C語言》、《數據結構與算法》、C語言刷題12天IO強訓、LeetCode代碼強化刷題、洛谷刷題、C/C基礎知識知識強化補充、C/C干貨分享&學習過程記錄 🍉學習方向:C/C方向 ??人…

【學習筆記】面向AI安全的26個緩解措施

一、Mitre Atlas矩陣概述 ATLAS 矩陣從左到右以列形式顯示了攻擊中使用的策略的進展,ML 技術屬于上面的每種策略。& 表示從 ATT&CK 改編而來。 詳見:ATLAS Matrix | MITRE ATLAS? 注:機翻的效果不是太好,對照理解用吧。 …

AI出題人給出的Java后端面經(十八)(日更)

鏈接雙端鏈表 前一篇:AI出題人給出的Java后端面經(十七)(日更) 后一篇:null 目錄 🔵 一、Java基礎(Java 17) 答案: 🗃? 二、持久化層&…

【音視頻】瑞芯微、全志芯片在運動相機和行車記錄儀產品分析

文章目錄開頭總結詳細分析**1. 瑞芯微芯片的典型型號及特性****2. 運動相機場景的適用性****優勢****劣勢****3. 行車記錄儀場景的適用性****優勢****劣勢****4. 與競品芯片對比****5. 推薦方案選擇****總結****1. 全志芯片的典型型號及特性****2. 運動相機場景的適用性****優勢…

《清華級防護,了解一下?》

前言講到滲透,我們不可避免會遇到有waf攔截咱們的攻擊許多朋友在滲透測試中因為遇到WAF而束手無策,實際上所謂的BYPASS WAF實際上是去尋找位于WAF設備之后處理應用層數據包的硬件/軟件的特性。利用特性構造WAF不能命中,但是在應用程序能夠執行…

CANDB++中的CAN_DBC快速編輯方法,使用文本編輯器(如notepad++和VScode)

前言:在做工程機械CAN協議相關的軟件開發與調試時,經常接觸到DBC的使用,可以在CAN分析儀中加載DBC文件從而快速查看某條CAN報文或信號的含義,以及使用圖形化的調試。而編輯DBC文件,正常是用CANDB來一條條添加,比較費時…

Tmux Xftp及Xshell的服務器使用方法

Tmux: Tmux是什么: 會話與進程: 命令行的典型使用方式是,打開一個終端窗口,在里面輸入命令。用戶與計算機的這種臨時的交互,稱為一次“會話”(session)。 會話的一個重要特點是&…

微服務遠程調用完全透傳實現:響應式與非響應式解決方案

🧑 博主簡介:CSDN博客專家,歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/?__c1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,精通Java編…

Kotlin集合概述

Kotlin 的集合類同樣由兩個接口派生: Collection 和 Map, Collection 和 Map 是 Java 集合框架的根接口,這兩個接口又包含了 一些子接口或實現類Kotlin 集合與 Java 集合不同, Java 集合都是可變集合一一開發者可以向集合中添加、…

Mysql核心框架知識

Mysql核心框架 本文旨在梳理和理解 MySQL 的一些核心知識點,并結合常見面試題進行思考和總結。這些內容主要來源于我的個人學習與理解。 1. 事務 概念 事務指的是滿足 ACID 特性的一組操作,可以通過 Commit 提交一個事務,也可以使用 Rollback…

C# NX二次開發:字符串控件StringBlock講解

大家好,今天介紹ug二次開發過程中的一個叫字符串的控件,這個控件在塊UI編輯器中可以使用。 下面是這個控件中的一些屬性和方法: 1、 protected internal StringBlock(); // // 摘要: // Returns or sets the WideValue.…

【datawhale組隊學習】n8n TASK01

教程地址:https://github.com/datawhalechina/handy-n8n/ 文章目錄n8n節點的類別local-pc-deployn8n n8n 意思是 nodemation,是 node 與 automation 的組合詞,讀作 n-eight-n。 n8n 是一個開源的、基于節點的自動化工具,官方站點…

海洋牧場項目融資新曙光:綠色金融賦能藍色經濟發展

在海洋經濟蓬勃發展的時代浪潮中,海洋牧場作為新興的海洋產業模式,承載著保障國家糧食安全、促進海洋生態保護與可持續利用的重要使命。然而,海洋牧場項目的建設是一項龐大而復雜的系統工程,從前期的基礎設施搭建、種苗培育&#…

51c大模型~合集170

自己的原文哦~ https://blog.51cto.com/whaosoft/14132244 #4DNeX 一張圖,開啟四維時空:4DNeX讓動態世界 「活」起來 僅憑一張照片,能否讓行人繼續行走、汽車繼續飛馳、云朵繼續流動,并讓你從任意視角自由觀賞&#…

深入剖析以太坊虛擬機(EVM):區塊鏈世界的計算引擎

引言:EVM——區塊鏈世界的"計算引擎" 以太坊虛擬機(Ethereum Virtual Machine,EVM)是以太坊網絡的核心創新,它不僅僅是一個執行環境,更是整個區塊鏈生態系統的"計算引擎"。作為智能合…

深入分析 Linux PCI Express 子系統

深入分析 Linux PCI Express 子系統 一、PCI Express 工作原理 PCIe 是一種高速串行點對點互連協議,采用分層架構: #mermaid-svg-rsh0SW87JPR0aUxA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid…

MySQL 運算符詳解:邏輯、位運算與正則表達式應用

MySQL 運算符詳解:邏輯、位運算與正則表達式應用 在 MySQL 中,運算符是構建復雜查詢條件的基礎。除了基礎的算術和比較運算符,邏輯運算符、位運算符以及正則表達式的靈活運用,能讓數據篩選更加精準高效。本文將系統講解這些運算符…

<數據集>遙感飛機識別數據集<目標檢測>

數據集下載鏈接https://download.csdn.net/download/qq_53332949/91702190數據集格式:VOCYOLO格式 圖片數量:3842張 標注數量(xml文件個數):3842 標注數量(txt文件個數):3842 標注類別數:20 標注類別名稱&#xf…

Windows從零到一安裝KingbaseES數據庫及使用ksql工具連接全指南

目錄Windows從零到一安裝KingbaseES數據庫及使用ksql工具連接全指南前言第一部分:安裝前準備1.1 系統要求檢查1.2 下載安裝包1.3 驗證安裝包完整性第二部分:安裝KingbaseES2.1 啟動安裝程序2.2 接受許可協議2.3 選擇授權文件2.4 設置安裝目錄2.5 選擇安裝…

Git+Jenkins 基本使用

一、什么是 JenkinsJenkins 是一個功能強大的應用程序,允許持續集成和持續交付項目(持續部署),無論用的是什么平臺。這是一個免費的源代碼,可以處理任何類型的構建或持續集成。集成 Jenkins 可以用于一些測試和部署技術…