国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue2自己封裝的基礎(chǔ)組件庫或基于Element-ui再次封裝的基礎(chǔ)組件庫,如何發(fā)布到npm并使用(支持全局或按需引入使用),超詳細

這篇具有很好參考價值的文章主要介紹了Vue2自己封裝的基礎(chǔ)組件庫或基于Element-ui再次封裝的基礎(chǔ)組件庫,如何發(fā)布到npm并使用(支持全局或按需引入使用),超詳細。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

最終效果如下

Vue2自己封裝的基礎(chǔ)組件庫或基于Element-ui再次封裝的基礎(chǔ)組件庫,如何發(fā)布到npm并使用(支持全局或按需引入使用),超詳細

一、先創(chuàng)建vue2項目

1、 可以用vue-cli自己來創(chuàng)建;也可以直接使用我開源常規(guī)的vue2后臺管理系統(tǒng)模板

以下我以 wocwin-admin-vue2 項目為例
修改目錄結(jié)構(gòu),最終如下

Vue2自己封裝的基礎(chǔ)組件庫或基于Element-ui再次封裝的基礎(chǔ)組件庫,如何發(fā)布到npm并使用(支持全局或按需引入使用),超詳細

2、修改vue.config.js文件

module.exports = {
// 修改 src 目錄 為 examples 目錄
  pages: {
    index: {
      entry: 'examples/main.js',
      template: 'public/index.html',
      filename: 'index.html'
    }
  },
    // 強制內(nèi)聯(lián)CSS(使用組件時,不需要再引入css)
  css: {
    extract: false
  },
  // 別名
  configureWebpack: config => {
    config.resolve.alias['@'] = resolve('examples')
    config.resolve.alias['components'] = resolve('examples/components')
    config.resolve.alias['~'] = resolve('packages')
    // 生產(chǎn)環(huán)境配置
    if (isProduction) {
      config.mode = 'production'
      // 打包文件大小配置
      config.performance = {
        maxEntrypointSize: 10000000,
        maxAssetSize: 30000000
      }
    }
  }
}

二、組件開發(fā)

1、首先需要創(chuàng)建一個 packages 目錄,用來存放組件

2、需要注意的是,組件必須聲明 name,這個 name 就是組件的標簽

3、這里以組件 TTable 為例,完整的 packages/table 目錄結(jié)構(gòu)如下:

Vue2自己封裝的基礎(chǔ)組件庫或基于Element-ui再次封裝的基礎(chǔ)組件庫,如何發(fā)布到npm并使用(支持全局或按需引入使用),超詳細

4、每個組件都應(yīng)該歸類于單獨的目錄下,包含其組件源碼目錄 src,和 index.js 便于外部引用

import TTable from './src'

TTable.install = function (Vue) {
  Vue.component(TTable.name, TTable)
}
export default TTable

5、packages 目錄下存放每個組件單獨的開發(fā)目錄,和一個 index.js 整合所有組件,并對外導(dǎo)出

1、導(dǎo)入組件,組件必須聲明 name

import TAntConfigform from './config-form'
import TAntLayoutConditional from './layout-conditional'
import TLayoutPage from './layout-page'
import TLayoutPageItem from './layout-page-item'
import TAntLayoutTable from './layout-table'
import TAntRangePicker from './range-picker'
import TCalendar from './calendar'
import TDatePicker from './date-picker'
import TDialog from './dialog'
import TEditTable from './edit-table'
import TComplexEditTable from './complex-edit-table'
import TForm from './form'
import TIcon from './icon'
import TInput from './input'
import TInputSearch from './input-search'
import TLayout from './layout'
import TPhone from './phone'
import TProtocol from './protocol'
import TQueryCondition from './query-condition'
import TSearch from './search'
import TStepWizard from './step-wizard'
import TSticky from './sticky'
import TTable from './table'
import TTimerBtn from './timer-btn'
import TTreeTable from './tree-table'
import TUploadFile from './upload-file'
import UploadFile from './UploadFile'
import TAntLayoutForm from './layout-form'
import TModuleForm from './module-form'
import TBtnDate from './btn-date'
import TSelect from './select'
import TPaginationSelect from './pagination-select'
import TDetail from './detail'
import { TAntModal, TAntProtocol } from './modal'
import TSelectTable from './select-table'
import TTreeSelect from './tree-select'
import TButton from './button'
import { version } from '../package.json'
// 存儲組件列表
const components = [
  TAntConfigform,
  TAntLayoutConditional,
  TLayoutPage,
  TLayoutPageItem,
  TAntLayoutTable,
  TAntRangePicker,
  TCalendar,
  TDialog,
  TDatePicker,
  TForm,
  TIcon,
  TInput,
  TInputSearch,
  TLayout,
  TPhone,
  TProtocol,
  TQueryCondition,
  TSearch,
  TStepWizard,
  TSticky,
  TTable,
  TTimerBtn,
  TTreeTable,
  TUploadFile,
  UploadFile,
  TAntLayoutForm,
  TAntModal,
  TAntProtocol,
  TModuleForm,
  TComplexEditTable,
  TEditTable,
  TBtnDate,
  TSelect,
  TPaginationSelect,
  TDetail,
  TSelectTable,
  TButton,
  TTreeSelect
]

2、定義 install 方法,接收 Vue 作為參數(shù)。如果使用 use 注冊插件,則所有的組件都將被注冊

const install = function (Vue) {
  // 判斷是否安裝
  if (install.installed) return
  install.installed = true
  // 遍歷注冊全局組件
  components.map(component => Vue.component(component.name, component))
}

// 判斷是否是直接引入文件
if (typeof window !== 'undefined' && window.Vue) {
  install(window.Vue)
}

3、導(dǎo)出的對象必須具有 install,才能被 Vue.use() 方法安裝(全局使用)

export default {
  version,
  // 導(dǎo)出的對象必須具有 install,才能被 Vue.use() 方法安裝
  install
}

4、按需引入

export {
  TAntConfigform,
  TAntLayoutConditional,
  TLayoutPage,
  TLayoutPageItem,
  TAntLayoutTable,
  TAntRangePicker,
  TCalendar,
  TDialog,
  TDatePicker,
  TForm,
  TIcon,
  TInput,
  TInputSearch,
  TLayout,
  TPhone,
  TProtocol,
  TQueryCondition,
  TSearch,
  TStepWizard,
  TSticky,
  TTable,
  TTimerBtn,
  TTreeTable,
  TUploadFile,
  UploadFile,
  TAntLayoutForm,
  TAntModal,
  TAntProtocol,
  TModuleForm,
  TComplexEditTable,
  TEditTable,
  TBtnDate,
  TSelect,
  TPaginationSelect,
  TDetail,
  TSelectTable,
  TButton,
  TTreeSelect
}

5、packages/index.js完整代碼

import TAntConfigform from './config-form'
import TAntLayoutConditional from './layout-conditional'
import TLayoutPage from './layout-page'
import TLayoutPageItem from './layout-page-item'
import TAntLayoutTable from './layout-table'
import TAntRangePicker from './range-picker'
import TCalendar from './calendar'
import TDatePicker from './date-picker'
import TDialog from './dialog'
import TEditTable from './edit-table'
import TComplexEditTable from './complex-edit-table'
import TForm from './form'
import TIcon from './icon'
import TInput from './input'
import TInputSearch from './input-search'
import TLayout from './layout'
import TPhone from './phone'
import TProtocol from './protocol'
import TQueryCondition from './query-condition'
import TSearch from './search'
// import TSimpleForm from './simple-form'
import TStepWizard from './step-wizard'
import TSticky from './sticky'
import TTable from './table'
import TTimerBtn from './timer-btn'
import TTreeTable from './tree-table'
// import TUploadExcel from './upload-excel'
import TUploadFile from './upload-file'
import UploadFile from './UploadFile'
import TAntLayoutForm from './layout-form'
import TModuleForm from './module-form'
import TBtnDate from './btn-date'
import TSelect from './select'
import TPaginationSelect from './pagination-select'
import TDetail from './detail'
import { TAntModal, TAntProtocol } from './modal'
import TSelectTable from './select-table'
import TTreeSelect from './tree-select'
import TButton from './button'
// import TTheme from './theme'
import { version } from '../package.json'
// 存儲組件列表
const components = [
  TAntConfigform,
  TAntLayoutConditional,
  TLayoutPage,
  TLayoutPageItem,
  TAntLayoutTable,
  TAntRangePicker,
  TCalendar,
  TDialog,
  TDatePicker,
  TForm,
  TIcon,
  TInput,
  TInputSearch,
  TLayout,
  TPhone,
  TProtocol,
  TQueryCondition,
  TSearch,
  // TSimpleForm,
  TStepWizard,
  TSticky,
  TTable,
  TTimerBtn,
  TTreeTable,
  // TUploadExcel,
  TUploadFile,
  UploadFile,
  TAntLayoutForm,
  TAntModal,
  TAntProtocol,
  TModuleForm,
  TComplexEditTable,
  TEditTable,
  TBtnDate,
  TSelect,
  TPaginationSelect,
  TDetail,
  TSelectTable,
  TButton,
  TTreeSelect
  // TTheme
]

// 定義 install 方法,接收 Vue 作為參數(shù)。如果使用 use 注冊插件,則所有的組件都將被注冊
const install = function (Vue) {
  // 判斷是否安裝
  if (install.installed) return
  install.installed = true
  // 遍歷注冊全局組件
  components.map(component => Vue.component(component.name, component))
}

// 判斷是否是直接引入文件
if (typeof window !== 'undefined' && window.Vue) {
  install(window.Vue)
}
// 按需引入
export {
  TAntConfigform,
  TAntLayoutConditional,
  TLayoutPage,
  TLayoutPageItem,
  TAntLayoutTable,
  TAntRangePicker,
  TCalendar,
  TDialog,
  TDatePicker,
  TForm,
  TIcon,
  TInput,
  TInputSearch,
  TLayout,
  TPhone,
  TProtocol,
  TQueryCondition,
  TSearch,
  // TSimpleForm,
  TStepWizard,
  TSticky,
  TTable,
  TTimerBtn,
  TTreeTable,
  // TUploadExcel,
  TUploadFile,
  UploadFile,
  TAntLayoutForm,
  TAntModal,
  TAntProtocol,
  TModuleForm,
  TComplexEditTable,
  TEditTable,
  TBtnDate,
  TSelect,
  TPaginationSelect,
  TDetail,
  TSelectTable,
  TButton,
  TTreeSelect
  // TTheme
}
export default {
  version,
  // 導(dǎo)出的對象必須具有 install,才能被 Vue.use() 方法安裝
  install
}

三、修改package.json文件

1、package.json 文件里面有很多字段要填寫,否則不能正確發(fā)布。最重要的是以下幾個:

  1. name: 包名,該名字是唯一的??稍?npm 官網(wǎng)搜索名字,如果存在則需換個名字。
  2. version: 版本號,不能和歷史版本號相同。
  3. main: 入口文件,默認為 index.js,這里改為 lib/t-ui-plus.umd.cjs。
  4. module: 模塊入口,這里改為 lib/t-ui.umd.min.js。
  5. private:false
  6. repository----倉庫地址
  7. homepage----組件文檔或demo示例
  8. keywords-----關(guān)鍵字(便于搜索)

2、在package.json 文件scripts里面新增一條lib打包命令:

Vue CLI 中提供了構(gòu)建庫的方法,你可以通過下面的命令將一個單獨的入口構(gòu)建為一個庫:

vue-cli-service build --target lib --name myLib [entry]

target: 改為 lib 可啟用構(gòu)建庫模式應(yīng)用模式
name: 構(gòu)建庫輸出的文件名;
dest: 構(gòu)建的輸出目錄,默認為 dist;
entry: 打包入口文件路徑;

"scripts": {
   "lib": "vue-cli-service build --target lib --name t-ui --dest lib packages/index.js",
 }

四、發(fā)布到npm

1、先查看 npm 的 registry

npm config get registry

2、設(shè)置 npm 的 registry 為官方源

npm config set registry https://registry.npmjs.org

3、執(zhí)行命令 npm login 登錄到 npm

4、執(zhí)行命令 npm publish 發(fā)布到 npm

如出現(xiàn)以下信息,則證明包發(fā)布成功:

Vue2自己封裝的基礎(chǔ)組件庫或基于Element-ui再次封裝的基礎(chǔ)組件庫,如何發(fā)布到npm并使用(支持全局或按需引入使用),超詳細

5、注:上傳的 npm 包,在 72小時 后不可刪除,如果是測試用的包,記得 72小時 內(nèi)刪除。

五、安裝使用

// 先安裝
npm i @wocwin/t-ui
// 1、 在main.js中按下引入(全局使用)
import Tui from '@wocwin/t-ui'
Vue.use(Tui)
// 2、按需引入,在單個vue文件如下引入,在注冊;或者在main.js中如下引入在注冊,皆可!
import { TTable, TLayoutPage, TLayoutPageItem, TForm, TQueryCondition } from '@wocwin/t-ui'

源碼地址

gitHub組件地址

gitee碼云組件地址

相關(guān)文章

基于ElementUi&Antd再次封裝基礎(chǔ)組件文檔


vue3+ts基于Element-plus再次封裝基礎(chǔ)組件文檔


vite+vue3+ts項目搭建之集成qiankun文章來源地址http://www.zghlxwxcb.cn/news/detail-476732.html

到了這里,關(guān)于Vue2自己封裝的基礎(chǔ)組件庫或基于Element-ui再次封裝的基礎(chǔ)組件庫,如何發(fā)布到npm并使用(支持全局或按需引入使用),超詳細的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Vue2 - 引入Element-UI組件樣式

    Vue2 - 引入Element-UI組件樣式

    官方文檔 https://element.eleme.cn/#/zh-CN/component/installation 推薦使用 npm 的方式安裝 ,它能更好地和 webpack 打包工具配合使用。 在終端cd到項目文件夾下安裝 也可以通過CDN(不推薦) 目前可以通過 unpkg.com/element-ui 獲取到最新版本的資源,在頁面上引入 js 和 css 文件即可開始使用。

    2024年02月06日
    瀏覽(26)
  • vue2自定義封裝圖片預(yù)覽組件

    前言:預(yù)覽圖片現(xiàn)在已經(jīng)有成熟的組件了,比如element ui的圖片預(yù)覽功能,但是現(xiàn)實開發(fā)過程中,element ui圖片預(yù)覽已經(jīng)不滿足需求了,比如涉及預(yù)覽時刪除圖片以及下載圖片 自定義封裝圖片預(yù)覽組件 功能:滾輪滾動圖片放大、還原圖片、左旋轉(zhuǎn)、右旋轉(zhuǎn)、上一張、下一張、刪

    2024年01月18日
    瀏覽(21)
  • Vue2封裝自定義全局Loading組件

    Vue2封裝自定義全局Loading組件

    前言 在開發(fā)的過程中,點擊提交按鈕,或者是一些其它場景總會遇到Loading加載框,PC的一些UI庫也沒有這樣的加載框,無法滿足業(yè)務(wù)需求,因此可以自己自定義一個,實現(xiàn)過程如下。 效果圖 如何封裝? 第1步:創(chuàng)建要封裝成全局組件的文件 第2步:注冊組件 Loading這類的通用

    2024年02月15日
    瀏覽(25)
  • vue2+element ui封裝搜索組件

    組件使用 封裝組件:vueSearch 下拉多選組件:selectecho

    2024年02月08日
    瀏覽(29)
  • 封裝vue2局部組件都要注意什么

    template? =? 組件的模板結(jié)構(gòu)? (必選) 每個組件對應(yīng)的模板結(jié)構(gòu),需要定義到template節(jié)點中 template中使用的指令 template定義根節(jié)點 注:vue 2.x版本中,template節(jié)點內(nèi)dom結(jié)構(gòu)僅支持單個根節(jié)點;但在vue 3.x版本中,支持多個根節(jié)點 script? =? 組件的javascript行為? (可選) script中的

    2024年02月13日
    瀏覽(21)
  • Vue2封裝一個全局通知組件并發(fā)布到NPM

    Vue2封裝一個全局通知組件并發(fā)布到NPM

    ???作者:周棋洛,計算機學(xué)生 ?星座:金牛座 ??主頁:點擊查看更多 ??關(guān)鍵: vue2 組件封裝 npm發(fā)包 你好!我是王子周棋洛,好久沒寫文了。 今天帶大家 封裝 一個類似 element-ui 的全局通知組件,并發(fā)布到 npm 后安裝使用自己封裝的組件。go,go,go?? 原因1:現(xiàn)成UI組件

    2024年02月09日
    瀏覽(23)
  • vue2封裝一個步進器組件number-box

    vue2封裝一個步進器組件number-box

    最近做一個商城的項目,商品的詳情頁和購物車列表都需要用到上面數(shù)量增減的功能,其實這個是一個很普通的功能,但是購物車的列表是放到vuex里面的,這里記錄使用的差別: 首先封裝number-box組件: 在列表頁去引用,并使用v-vmode傳遞數(shù)據(jù): 如果數(shù)據(jù)是直接在data下面,直

    2024年02月04日
    瀏覽(20)
  • 【Vue框架】Vue2中element-ui/mint-ui組件庫——element-ui引入組件以及使用案例、mint-ui引入組件及使用案例

    【Vue框架】Vue2中element-ui/mint-ui組件庫——element-ui引入組件以及使用案例、mint-ui引入組件及使用案例

    element-ui 提供了大量的組件,如:布局組件、表單組件、JS組件等等。 Element-ui官網(wǎng): https://element.eleme.cn/#/zh-CN 安裝 Element-ui: npm i element-ui -S 1.1.1 引入組件 引入 Element 完整引入(在 main.js 中寫入以下內(nèi)容): 按需引入 借助 babel-plugin-component,我們可以只引入需要的組件,以達到

    2024年02月07日
    瀏覽(32)
  • Vue3 + Vite + Ts自己封裝的基礎(chǔ)組件庫發(fā)布npm ,npm安裝使用(Volar )支持TS 類型提示功能(vite-plugin-dts 使用)

    Vue3 + Vite + Ts自己封裝的基礎(chǔ)組件庫發(fā)布npm ,npm安裝使用(Volar )支持TS 類型提示功能(vite-plugin-dts 使用)

    在開發(fā)Vue3 + Ts項目時:使用自己二次封裝的基礎(chǔ)組件,沒有 Ts類型提示 ,不能像 Element-plus 鼠標停在標簽或者屬性上就能提示當前組件有哪些屬性(即props)及其屬性的類型,如下圖是 Element-plus 組件的 使用Vs Code Volar的提示: 此插件的作用:為打包的庫里加入聲明文件(即生

    2024年02月09日
    瀏覽(26)
  • element-ui Vue 封裝組件按鈕工具欄,使用slot插槽

    element-ui Vue 封裝組件按鈕工具欄,使用slot插槽

    封裝常用按鈕工具欄,方便其它頁面調(diào)用 缺點:工具欄下面div會顯示工具欄下面,下面需要使用margin-top:40px(小學(xué)生一個沒整明白)希望大神能幫解決 運行效果 ???????? 組件代碼?tt-btnBar.vue 父窗口調(diào)用?testbtnbar.vue

    2024年02月02日
    瀏覽(37)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包