如何基于Vuetify创建自己的组件库

2024-04-28

我想基于 Vuetify 创建我的组件库并在 npm 上发布。

Vuetify 已经有 vue-plugin 标准安装并使用 vuetify-loader,我认为这是一个比纯 HTML 组件更复杂的场景。

例如,我想创建我的登录表单, my 文章页,我的默认日历选择器与预设值。

有执行此操作的标准方法或指南或执行此操作的示例吗?

我使用最新版本的 vuetify (2.0.7)


我刚刚让它适用于 Vue3/Vuetify3。简而言之(使用 pnpm、vite、typescript、Vue 插件):

将组件创建为新项目:

pnpm create vue@latest
-> your-plugin
-> Typescript
-> ESLint
cd <project>
echo auto-install-peers = true > .npmrc
pnpm add -D vuetify rollup-plugin-typescript2

然后删除所有组件并制作您自己的组件。 创建 src\components\index.ts 和 src\YourPlugin.ts

src\组件\index.ts

export {default as YourComponent} from "./YourComponent.vue"

src\YourPlugin.ts

import type { App } from "vue"
import { YourComponent } from "./components"
export default {
    install: (app: App) => {
        app.component("YourComponent", YourComponent)
    }
};

vite.config.ts

添加到imports:

import vuetify from 'vite-plugin-vuetify'
import typeScript2 from "rollup-plugin-typescript2"

添加到plugins:

vuetify({
  autoImport: true,
}),
typeScript2({
  check: false,
  include: ["src/components/*.vue"],
  tsconfigOverride: {
    compilerOptions: {
      sourceMap: true,
      declaration: true,
      declarationMap: true,
    }
  },
  exclude: [
    "vite.config.ts"
  ]
})

添加新部分build到定义配置:

  build: {
    cssCodeSplit: false,
    lib: {
      entry: "./src/YourPlugin.ts",
      formats: ["es", "cjs"],
      name: "CommonVtfyPlugin",
      fileName: format => (format == "es" ? "index.js" : "index.cjs"),
    },
    rollupOptions: {
      external: ["vue", "vuetify/lib"],
      output: {
        globals: {
          vue: "Vue",
          vuetify: "Vuetify",
            'vuetify/components': 'VuetifyComponents',
            'vuetify/directives': 'VuetifyDirectives'
        }
      }
    }
  },

dist\index.d.ts

我还没有弄清楚如何生成它。但这是一个通用的立场:

declare const _default: any;
export default _default;

包.json

添加这个:

  "type": "module",
  "exports": {
    ".": "./dist/index.js"
  },
  "types": "./dist/index.d.ts",
  "files": [
    "dist"
  ],

您可以通过将其作为插件导入来在任何 Vue 项目中使用它:

import YourComponent from 'your-plugin'
app.use(YourComponent)

无法保证其优化程度(欢迎反馈)..但它有效(tm).. 可以找到更详细的答案pnpm monorepo:如何设置一个简单的可重用(vue)组件以供重用? https://stackoverflow.com/questions/75117561/pnpm-monorepo-how-to-set-up-a-simple-reusable-vue-component-for-reuse(任何更新也将主要在该答案中更新,如果有的话)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何基于Vuetify创建自己的组件库 的相关文章

随机推荐

  • Vaadin - GWT 错误“模块 xxx 可能需要重新编译

    我正在加大 Vaadin 的力度 每当我尝试运行演示应用程序时 都会收到此 javascript 警报 GWT module com vaadin terminal gwt DefaultWidgetSet may need to be r
  • linux命令行:如何简单地将任意字符串输入管道?

    我正在寻找一个非常简单的技巧 假设文件中error txt 有一个很长的字符串 errorMessage key1 some message key2 message 2 由于它的格式不适合读者 如果我想在终端中以格式良好的形式查看它 我可
  • 如何在 WordPress 中调用 href 上的 PHP 函数?

    我有以下功能 我想在用户单击超链接 取消激活我的帐户 时调用此函数 在 href 点击上调用函数的最佳方式是什么 谢谢 function deleteUserMeta userID delete usermeta userID subscr
  • java中的new关键字是多余的吗?

    我来自 C 所以 java 的一个特性我不太理解 我读过所有对象都必须使用关键字创建new 但基元除外 现在 如果编译器可以识别原始类型 并且不允许您在不调用其构造函数的情况下创建对象new 有这个关键字的原因是什么new根本吗 有人可以提
  • 防止我的数据影响谷歌分析

    我最近推出了一个网站 并使用谷歌分析来跟踪流量和趋势 不幸的是 我喜欢和我的商业伙伴一起经常检查该网站 我们的数据正在影响我们的谷歌分析 有没有一种简单的方法可以使某些用户活动不会被谷歌分析跟踪 我正在考虑将另一个域名 或子域 附加到我的网
  • 提升 ggplot2 性能

    The ggplot2软件包无疑是我使用过的最好的绘图系统 只是对于较大的数据集 约 50k 点 来说性能并不是很好 我正在考虑通过 Shiny 提供网络分析 使用ggplot2作为绘图后端 但我对其性能并不满意 尤其是与基础图形相比 我的
  • 专门化 STL 算法,以便它们在可用时自动调用高效的容器成员函数

    STL 具有全局算法 可以在任意容器上运行 只要它们支持该算法的基本要求 例如 某些算法可能要求容器具有随机访问迭代器 例如向量而不是列表 当容器具有比通用算法更快的执行方式时 它会提供具有相同名称的成员函数来实现相同的目标 就像提供自己的
  • 合并分割的 PDF 后尺寸增加

    我在我的应用程序中使用 PDF 进行渲染 以获取页面级别的各种其他信息 为不同的 O P 格式创建 swf xml 等 页面级别拆分已完成并处理 环境是Linux Fedora 8 最终的 PDF 是使用分割 PDF 重新创建的 但对于一些
  • 尝试在 macOS 11.1 上“运行”arm64 二进制文件时,lldb 给出“附加失败”

    这是在 M1 mini 上 运行 11 1 并更新了 Xcode 所有挂起的更新均已应用 SIP 尚未禁用 如果可以的话 在 M1 上 我们有一个程序用来测试mmap 我们的应用程序移植失败 我们像这样构建测试程序 cc v arch ar
  • 将 laravel 从 5.5 更新到 5.7 时出现错误(未定义的类常量 'HEADER_CLIENT_IP')

    我收到这个错误 未定义的类常量 HEADER CLIENT IP 脚本 php artisan package discover 处理返回的 post autoload dump 事件 错误代码1 我变了 app Http Middlewa
  • 修改 CookieAuthenticationOptions LoginPath OnRedirectToReturnUrl 事件

    我的 MVC 6 ASP NET 5 项目中有以下设置 配置方法中的Startup cs app UseCookieAuthentication options gt options AuthenticationScheme Cookie
  • 如何将 Boost 库添加到 XCode 6.0 中的 C++ 程序?

    我在用着XCode6 0并且需 要boost程序库 我已经下载了boost 1 57 0 tar gz from http sourceforge net projects boost files boost 1 57 0 http sou
  • 了解 ASP.NET Eval() 和 Bind()

    任何人都可以向我展示一些绝对最小的 ASP NET 代码来理解Eval and Bind 最好为我提供两个单独的代码片段或者可能是网络链接 对于只读控件 它们是相同的 对于 2 路数据绑定 使用要在其中通过声明性数据绑定更新 插入等的数据源
  • 通常可重用的注释或公共注释?

    有没有常用的注释 类似于 commons lang 如果没有 您是否见过在任何开源应用程序开发中有效使用注释 不是内置注释 的情况 我记得 Mifos 用它来进行交易 Mohan i think 休眠验证器 http www hiberna
  • 在 C# 中读取并发送 mp4 文件

    我使用以下代码从服务器读取 mp4 文件并通过 http 发送它 我的服务器端是 mvc4 控制器 有趣的是 视频在 Chrome 中渲染得很好 但在 ios 设备上没有得到任何东西 所以我认为这可能是响应流标头问题 我缺少什么吗 var
  • 具有自定义字段名称的 RavenDB 查询索引

    我在 RavenDB 中收集了 Message 文档 定义 class Message string Content Tag Tags class Tag string Value 我有索引 from doc in docs Message
  • 如何使用循环将值添加到 VARRAY

    我有一个 VARRAY 我想通过使用循环向该 VARRAY 添加元素 这是我到目前为止所尝试过的 DECLARE TYPE code array IS VARRAY 26 OF VARCHAR2 6 codes code array BEG
  • WP8 + 将文件上传到 Skydrive

    我正在尝试将一个简单的 cer 文件上传到 SkyDrive 不管LiveConnectClient Method我用了 没有任何反应 没有编译 运行时或其他异常 我的应用程序从未收到LiveOperationResult 我正在使用模拟器
  • 如何显示 Jupyter 笔记本的版本并在 Jupyter 笔记本中运行单元?我收到错误:错误的解释器

    我已经安装了 Anaconda 并使用 conda 环境和 conda 命令来安装软件 当我输入 jupyter notebook version 我收到以下错误 zsh Users cr517 local bin jupyter bad
  • 如何基于Vuetify创建自己的组件库

    我想基于 Vuetify 创建我的组件库并在 npm 上发布 Vuetify 已经有 vue plugin 标准安装并使用 vuetify loader 我认为这是一个比纯 HTML 组件更复杂的场景 例如 我想创建我的登录表单 my 文章