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

沉淀自己的pro-table組件,并發(fā)布到npm(Vue3、element-plus)

這篇具有很好參考價(jià)值的文章主要介紹了沉淀自己的pro-table組件,并發(fā)布到npm(Vue3、element-plus)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

沉淀自己的pro-table組件,并發(fā)布到npm

傳送門

約定:npm包名vue3-el-pro-table,引用vue3-el-pro-table的包名為“本項(xiàng)目”。

聲明:Vue3ProTable.vue代碼是在這個項(xiàng)目的基礎(chǔ)上進(jìn)行修改的。

作者:hans774882968以及hans774882968以及hans774882968

Quick Start

yarn add vue3-el-pro-table

src/main.ts

import 'vue3-el-pro-table/dist/vue3-el-pro-table.css';
import Vue3ProTable from 'vue3-el-pro-table';

createApp(App)
  .use(Vue3ProTable)
  .mount('#app');

Then use <vue3-pro-table /> directly in .vue file.

Import interface:

import { Vue3ProTableProps } from 'vue3-el-pro-table';

Component props definition:

export declare interface Vue3ProTableProps {
  request: (...args: any[]) => Promise<{ data: object[], total: number }>
  // 表格標(biāo)題
  title?: string
  // 是否隱藏標(biāo)題欄
  hideTitleBar?: boolean
  // 搜索表單配置,false表示不顯示搜索表單
  search?: boolean | object
  border?: boolean
  // 表頭配置
  columns?: object[]
  // 行數(shù)據(jù)的Key,同elementUI的table組件的row-key
  rowKey?: string
  // 分頁配置,false表示不顯示分頁
  pagination?: boolean | object
  tree?: object
  // The above attributes are all from https://github.com/huzhushan/vue3-pro-table. The following properties are added by me.
  loadTableDataBeforeMount?: boolean
  blockRedundantRequestOnReset?: boolean
  paddingLeft?: string | number
  paddingRight?: string | number
}

Plz refer to https://github.com/huzhushan/vue3-pro-table for instructions on how to use vue3-el-pro-table.

開發(fā)過程筆記

根據(jù)參考鏈接3,實(shí)際上我們只需要提供一個符合Vue插件格式的入口install.js,和一個Vue組件。但為了滿足npm包迭代過程中的預(yù)覽、測試等需求,我們?nèi)匀恍枰越M件庫的標(biāo)準(zhǔn)來開發(fā)這個npm包。因此我采用的方案是:先使用vue-cli快速創(chuàng)建一個項(xiàng)目,滿足組件的預(yù)覽、測試等需求,在此基礎(chǔ)上再新增一個構(gòu)建流程。

  1. 使用vue-cli創(chuàng)建一個普通的Vue3 + TS項(xiàng)目。
  2. 新增組件src/components/Vue3ProTable.vue。
  3. 新增Vue插件入口src/install.js
import HelloWorld from './components/HelloWorld.vue';
import Vue3ProTable from './components/Vue3ProTable.vue';

function install(app) {
  if (install.installed) return;
  install.installed = true;

  app.component('test-hello-world', HelloWorld); // 順便把腳手架生成的組件也注冊為全局組件
  app.component('vue3-pro-table', Vue3ProTable);
}

Vue3ProTable.install = install;

export default { install };
  1. 新增build-lib命令并運(yùn)行yarn build-lib——這就是vue3-el-pro-table生成Vue插件的構(gòu)建命令:
{
  "scripts": {
    "build": "vue-cli-service build", // 作為對比
    "build-lib": "vue-cli-service build --target lib --name vue3-el-pro-table ./src/install.js" // 參考:https://cli.vuejs.org/guide/build-targets.html#library
  },
}
  1. 構(gòu)建成功后修改package.json修改下入口:
{
  "main": "dist/vue3-el-pro-table.umd.js",
}

在另一個項(xiàng)目(即本項(xiàng)目)預(yù)覽最新改動:

yarn add file:../vue3-el-pro-table

接下來開始踩坑了。當(dāng)引入的組件使用slot的時(shí)候會報(bào)錯:

Cannot read properties of null (reading 'isCE')

根據(jù)參考鏈接2,原因是本項(xiàng)目和vue3-el-pro-table各有一個vue,即使它們版本相同也會引起沖突。雖然參考鏈接2的提問說給webpack添加vue配置無濟(jì)于事,但我的項(xiàng)目用這個配置是可以解決問題的。

在本項(xiàng)目的vue.config.js禁用symlinks并alias vue:

const { defineConfig } = require('@vue/cli-service');
const path = require('path');

module.exports = defineConfig({
  chainWebpack(config) {
    config.resolve.symlinks(false);
    config.resolve.alias.set('vue', path.resolve('./node_modules/vue'));
  },
  devServer: {
    port: 8090,
  },
  transpileDependencies: true,
});

add TS Support

為了防止本項(xiàng)目報(bào)TS錯誤,我們的npm包vue3-el-pro-table需要給出.d.ts文件。

  1. 本項(xiàng)目package.json指定類型定義文件路徑:
{
  "types": "dist/global.d.ts"
}
  1. 本項(xiàng)目tsconfig.json新增配置:
{
  "compilerOptions": {
    "types": [
      "webpack-env",
      "jest",
      "vue3-el-pro-table/dist/global.d.ts", // 獲取 vue3-el-pro-table 注冊的全局組件的類型提示
      "element-plus/global.d.ts" // 獲取 element-plus 組件的類型提示
    ],
  }
}

global.d.ts不應(yīng)該放在dist目錄,因此我把它放到了src/global.d.ts,并配置CopyWebpackPlugin。vue3-el-pro-tablevue.config.js

const { defineConfig } = require('@vue/cli-service');
const path = require('path');
const CopyWebpackPlugin = require('copy-webpack-plugin');

module.exports = defineConfig({
  configureWebpack: {
    plugins: [
      new CopyWebpackPlugin({
        patterns: [
          {
            from: path.resolve(__dirname, 'src', 'global.d.ts'),
            to: path.resolve(__dirname, 'dist'),
          },
        ],
      }),
    ],
  },
  transpileDependencies: true,
});

最理想的情況下dist/global.d.ts能在編譯時(shí)直接生成,但可惜我們參考的Vue3ProTable.vue不是一個TS組件,且改造為TS組件的工作量過大,因此global.d.ts是手動維護(hù)的,傳送門。

我們期望dist/global.d.ts能夠給組件提供類型提示。根據(jù)參考鏈接4,需要以下代碼:

declare const CVue3ProTable: import('vue').DefineComponent<......>;
declare const CHelloWorld: import('vue').DefineComponent<{
  msg: StringConstructor;
}, unknown, unknown, object, object, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, object, string, import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, Readonly<import('vue').ExtractPropTypes<{
  msg: StringConstructor;
}>>, object, object>;

declare module 'vue' {
  export interface GlobalComponents {
    Vue3ProTable: typeof CVue3ProTable
    TestHelloWorld: typeof CHelloWorld
  }
}

這里的CVue3ProTable, CHelloWorld看上去很復(fù)雜,不會是手寫的吧?的確不是手寫的,可以讓vue-tsc生成。首先安裝vue-tsc并新增命令:

{
  "gen-declaration": "vue-tsc -p tsconfig.declaration.json"
}

然后新增tsconfig.declaration.json

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "outDir": "es",
    "declaration": true,
    "emitDeclarationOnly": true
  },
  "include": ["src"],
  "exclude": ["node_modules", "**/__tests__/**", "**/__demos__/**", "**/*.md"]
}

最后執(zhí)行yarn gen-declaration,把組件的類型定義復(fù)制到global.d.ts即可。文章來源地址http://www.zghlxwxcb.cn/news/detail-596396.html

參考資料

  1. 聲明式 UI 介紹:https://flutter.cn/docs/get-started/flutter-for/declarative
  2. Cannot read properties of null (reading ‘isCE’):https://stackoverflow.com/questions/71063992/when-importing-self-made-vue-3-library-into-vue-3-project-uncaught-typeerror
  3. 在 NPM 上創(chuàng)建并發(fā)布您的第一個 Vue.JS 插件:https://5balloons.info/create-publish-you-first-vue-plugin-on-npm-the-right-way/
  4. 全局組件類型聲明的最佳實(shí)踐 (Vue3+TS+Volar):https://juejin.cn/post/7066730414626308103

到了這里,關(guān)于沉淀自己的pro-table組件,并發(fā)布到npm(Vue3、element-plus)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • vue3 + vite自定義封裝vue + element-ui 表格組件,發(fā)布到npm包的全過程。

    vue3 + vite自定義封裝vue + element-ui 表格組件,發(fā)布到npm包的全過程。

    當(dāng)我們項(xiàng)目中用到的表格太多的話,就會導(dǎo)致我們的代碼量一直增加,所以我們要封裝一個公共得組件,通過傳參引入來使用,下面這篇文章主要給大家介紹了關(guān)于vue3+vite自定義封裝vue組件發(fā)布到npm包的相關(guān)資料,需要的朋友可以參考下。 提示我們要安裝 create-vite@4.1.0 得依賴

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

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

    以下我以 wocwin-admin-vue2 項(xiàng)目為例 修改目錄結(jié)構(gòu),最終如下 1、導(dǎo)入組件,組件必須聲明 name 2、定義 install 方法,接收 Vue 作為參數(shù)。如果使用 use 注冊插件,則所有的組件都將被注冊 3、導(dǎo)出的對象必須具有 install,才能被 Vue.use() 方法安裝(全局使用) 4、按需引入 5、packa

    2024年02月08日
    瀏覽(36)
  • Vue3+Vite+Element-plus搭建組件庫并使用Vitepress編輯組件庫文檔且發(fā)布到 npm并且部署 github pages(vitepress文檔渲染.vue組件-推薦使用第二種)

    Vue3+Vite+Element-plus搭建組件庫并使用Vitepress編輯組件庫文檔且發(fā)布到 npm并且部署 github pages(vitepress文檔渲染.vue組件-推薦使用第二種)

    可以參考我之前發(fā)布的vite快速搭建vue3項(xiàng)目文章來創(chuàng)建;也可以直接使用我開源Vue3.2+Ts+Vite3+Pinia+Element-Plus模板wocwin-admin 以下我以 wocwin-admin 項(xiàng)目為例 當(dāng)前目錄結(jié)構(gòu)如下 1、編輯 packages/table/index.ts,實(shí)現(xiàn)組件的導(dǎo)出 2、編輯 packages/index.ts 文件,實(shí)現(xiàn)組件的全局注冊 1、安裝vite

    2024年02月13日
    瀏覽(23)
  • 發(fā)布自己的npm包

    發(fā)布自己的npm包

    輸入npm init后,一路默認(rèn)即可初始化成功,如下: 初始化成功后會生成一個package.json文件 n(以我的文件夾demo-npm-dir為例) package.json配置如下: 然后在index.js寫即可。 這里我設(shè)置發(fā)布到npm公有平臺,根據(jù)個人項(xiàng)目需要配置。 注:檢測npm源命令 沒有請先在官網(wǎng)注冊,登錄時(shí)會

    2024年02月10日
    瀏覽(18)
  • 發(fā)布自己的npm 包

    沒有賬號先注冊一個,注冊地址https://www.npmjs.com 之后npm 網(wǎng)站搜索包名就可以看到了

    2024年02月15日
    瀏覽(20)
  • 如何發(fā)布自己的npm包

    如何發(fā)布自己的npm包

    首先創(chuàng)建一個文件夾(唯一的命名) 創(chuàng)建package.json包,輸出npm init,一直回車就好。 創(chuàng)建index.js文件,向外暴露方法。 將包上傳或更新到 npm ? 執(zhí)行登錄命令:npm login 登錄npm官網(wǎng),根據(jù)提示輸入用戶名和密碼,郵箱(郵箱必須在注冊時(shí)進(jìn)行驗(yàn)證) ?發(fā)布版本,在登陸命令后接

    2024年02月14日
    瀏覽(26)
  • 發(fā)布屬于自己的 npm 包

    發(fā)布屬于自己的 npm 包

    注意:輸入密碼的時(shí)候 不會顯示出來,輸入完整直接按回車即可

    2024年02月13日
    瀏覽(23)
  • 前端(vue)npm如何發(fā)布自己的包

    前端(vue)npm如何發(fā)布自己的包

    4.1然后執(zhí)行:npm run lib會得到lib文件夾 4.2配置package.json 在npm官網(wǎng)(https://www.npmjs.com/)按照步驟注冊一個賬號,我這邊已經(jīng)注冊好了直接登錄就行 6.1注冊成功之后然后在終端中輸入命令 出現(xiàn)這個之后就說明登陸成功了 6.2更新命令 這就可以使用了!!!

    2024年02月12日
    瀏覽(31)
  • 前端工程化:發(fā)布一個屬于自己的規(guī)范 npm 包

    前端工程化:發(fā)布一個屬于自己的規(guī)范 npm 包

    初始化項(xiàng)目 首先在github創(chuàng)建一個倉庫,協(xié)議選擇MIT,gitignore選擇Node,添加README.md描述文件。使用git clone將項(xiàng)目克隆到本地。cd 進(jìn)入目錄,使用vscode打開(終端輸入code . 命令即可)。 然后創(chuàng)建一個合理的目錄結(jié)構(gòu): 配置 typescript 統(tǒng)一代碼風(fēng)格 首先,配置eslint,使用遵循Air

    2024年02月05日
    瀏覽(91)
  • 73 # 發(fā)布自己的 http-server 到 npm

    73 # 發(fā)布自己的 http-server 到 npm

    1、添加 .npmignore 文件,忽略不需要的文件 2、去官網(wǎng)https://www.npmjs.com/檢查自己的包名是否被占用 3、切換到官方源,然后檢查確認(rèn) 4、登錄 npm 賬號 5、發(fā)布 6、查看發(fā)布情況,發(fā)布成功之后,等一會,我們就能看到自己的包在 npm 上了 7、更新版本,我們添加一個 README.md 文件

    2024年02月11日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包