Vue3组件库

Vue组件库

Vite+Vue3+Typescript+TSX

1、项目搭建

1.1、创建项目(yarn)

D:\WebstromProject>yarn create vite
yarn create v1.22.19
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...

success Installed "create-vite@4.4.1" with binaries:
      - create-vite
      - cva
√ Project name: ... chenxing
√ Select a framework: » Vue
√ Select a variant: » TypeScript

Scaffolding project in D:\WebstromProject\chenxing...

Done. Now run:

  cd chenxing
  yarn
  yarn dev

Done in 6.95s.

1.2、基础依赖

1、@types/node

# @types/node
yarn add -D @types/node

2、Jsx

# @vitejs/plugin-vue-jsx
yarn add -D @vitejs/plugin-vue-jsx

3、eslint

# eslint、vite-plugin-eslint(vite运行的时候自动检测eslint规范)
yarn add -D eslint
yarn add -D vite-plugin-eslint

4、prettier

# prettier、eslint-config-prettier(关掉所有和Prettier冲突的ESLint的配置)、eslint-plugin-prettier(将Prettier的rules以插件的形式加入到 ESLint里面)
yarn add -D prettier eslint-config-prettier eslint-plugin-prettier

5、sass

# sass
yarn add -D sass

1.3、项目配置

1、关闭Option Api

import {defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  define: {
    // 关闭Vue Options Api
    __VUE_OPTIONS_API__: false
  },
  plugins: [vue()],
})

2、Jsx配置

import {defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsxPlugin from "@vitejs/plugin-vue-jsx";

// https://vitejs.dev/config/
export default defineConfig({
  define: {
    // 关闭Vue Options Api
    __VUE_OPTIONS_API__: false
  },
  plugins: [
    vue(),
    vueJsxPlugin({})
  ],
})

3、路径别名

src修改为examples,新增examples同级文件夹packages作为UI组件位置

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import vueJsxPlugin from "@vitejs/plugin-vue-jsx";
import * as path from "path";

// https://vitejs.dev/config/
export default defineConfig({
  base: "./",
  define: {
    // 关闭Vue Options Api
    __VUE_OPTIONS_API__: false,
  },
  plugins: [vue(), vueJsxPlugin({})],
  resolve: {
    // 配置路径别名
    alias: {
      "@": path.resolve(__dirname, "./examples"),
    },
  },
});

1.4、eslint

1、初始化eslint

PS D:\WebstromProject\chenxing> npx eslint --init
You can also run this command directly using 'npm init @eslint/config'.
? How would you like to use ESLint? ...
  To check syntax only
> To check syntax and find problems
√ How would you like to use ESLint? · problems
√ What type of modules does your project use? · esm
√ Which framework does your project use? · vue
√ Does your project use TypeScript? · No / Yes
√ Where does your code run? · browser, node
√ What format do you want your config file to be in? · JavaScript
The config that you've selected requires the following dependencies:

@typescript-eslint/eslint-plugin@latest eslint-plugin-vue@latest @typescript-eslint/parser@latest
√ Would you like to install them now? · No / Yes
√ Which package manager do you want to use? · yarn
Installing @typescript-eslint/eslint-plugin@latest, eslint-plugin-vue@latest, @typescript-eslint/parser@latest

2、.eslintrc.cjs

module.exports = {
    "env": {
        "browser": true,
        "es2021": true,
        "node": true
    },
    "extends": [
        "eslint:recommended",
        "plugin:@typescript-eslint/recommended",
        "plugin:vue/vue3-essential"
    ],
    "overrides": [
        {
            "env": {
                "node": true
            },
            "files": [
                ".eslintrc.{js,cjs}"
            ],
            "parserOptions": {
                "sourceType": "script"
            }
        }
    ],
    "parserOptions": {
        "ecmaVersion": "latest",
        "parser": "@typescript-eslint/parser",
        "sourceType": "module"
    },
    "plugins": [
        "@typescript-eslint",
        "vue"
    ],
    "rules": {
    }
}

3、package.json

{
  "name": "chenxing",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vue-tsc && vite build",
    "preview": "vite preview",
    "lint": "eslint . --ext .vue,.js,.ts,.jsx,.tsx --fix"
  },
  "dependencies": {
    "vue": "^3.3.4"
  },
  "devDependencies": {
    "@typescript-eslint/eslint-plugin": "^6.3.0",
    "@typescript-eslint/parser": "^6.3.0",
    "@vitejs/plugin-vue": "^4.2.3",
    "@vitejs/plugin-vue-jsx": "^3.0.1",
    "eslint": "^8.46.0",
    "eslint-plugin-vue": "^9.17.0",
    "typescript": "^5.0.2",
    "vite": "^4.4.5",
    "vite-plugin-eslint": "^1.8.1",
    "vue-tsc": "^1.8.5"
  }
}

4、webstrom配置

在这里插入图片描述

1.5、prettier

1、.prettierrc.cjs

module.exports = {
  printWidth: 80, // 单行长度
  tabWidth: 2, // 缩进长度
  useTabs: false, // 使用空格代替tab缩进
  semi: true, // 句末使用分号
  singleQuote: false, // 使用单引号
}

2、.eslintrc.cjs

module.exports = {
  "env": {
    "browser": true,
    "es2021": true,
    "node": true
  },
  "extends": [
    "eslint:recommended",
    "plugin:@typescript-eslint/recommended",
    "plugin:vue/vue3-essential",
    'plugin:prettier/recommended',
    'eslint-config-prettier'
  ],
  "overrides": [
    {
      "env": {
        "node": true
      },
      "files": [
        ".eslintrc.{js,cjs}"
      ],
      "parserOptions": {
        "sourceType": "script"
      }
    }
  ],
  "parserOptions": {
    "ecmaVersion": "latest",
    "parser": "@typescript-eslint/parser",
    "sourceType": "module"
  },
  "plugins": [
    "@typescript-eslint",
    "vue"
  ],
  "rules": {}
}

3、package.json

{
  "name": "chenxing",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vue-tsc && vite build",
    "preview": "vite preview",
    "lint": "eslint . --ext .vue,.js,.ts,.jsx,.tsx",
    "prettier": "prettier --write ./**/*.{vue,ts,tsx,js,jsx,css,less,scss,json,md}"
  },
  "dependencies": {
    "vue": "^3.3.4"
  },
  "devDependencies": {
    "@types/node": "^20.4.10",
    "@typescript-eslint/eslint-plugin": "^6.3.0",
    "@typescript-eslint/parser": "^6.3.0",
    "@vitejs/plugin-vue": "^4.2.3",
    "@vitejs/plugin-vue-jsx": "^3.0.1",
    "eslint": "^8.47.0",
    "eslint-config-prettier": "^9.0.0",
    "eslint-plugin-prettier": "^5.0.0",
    "eslint-plugin-vue": "^9.17.0",
    "prettier": "^3.0.1",
    "sass": "^1.65.1",
    "typescript": "^5.0.2",
    "vite": "^4.4.5",
    "vite-plugin-eslint": "^1.8.1",
    "vue-tsc": "^1.8.5"
  }
}

4、webstrom配置

在这里插入图片描述

2、Button组件

2.1、基础组件

在package下新建components目录,components下新建button目录,button下新建src目录和index.ts文件,src目录下新建button.tsx和type.ts

1、button.tsx

import { defineComponent, toRefs } from "vue";
import { PropsType, propsType } from "./type";
import "../style/index.scss";

export default defineComponent({
  name: "XButton",
  props: propsType,
  setup(props: PropsType, { slots }) {
    const { type } = toRefs(props);
    console.log(type);
    return () => {
      return (
        <div class={`button button-${type.value}`}>
          {slots.default ? slots.default() : "Button"}
        </div>
      );
    };
  },
});

2、type.ts

import { ExtractPropTypes, PropType } from "vue";

// buttonType
type type = "default" | "success" | "warning" | "fail";

// props参数类型
export const propsType = {
  type: {
    type: String as PropType<type>,
    default: "default",
  },
};

export type PropsType = ExtractPropTypes<typeof propsType>;

3、index.ts

import XButton from "./src/button";
import { App } from "vue";

export default {
  install(app: App) {
    app.component(XButton.name, XButton);
  },
};

2.2、样式

src同级新建chenxing.scss(通用样式抽离),src同级新建style目录,style下新建index.scss

1、chenxing.scss

$fontSize: var(--font-size, 14px);
$fontColor: #3c3c3c;
$lineHeight: 1.2rem;
$border-radius: var(--border-radius, 2px);

// 基础样式
* {
  margin: 0; // 清除所有元素外边距
  padding: 0; // 清除所有元素内边距
  outline: none; // 清除所有元素轮廓线
  box-sizing: border-box !important; // 规定盒子模型。content-box:宽度和高度分别应用到元素的内容框。在宽度和高度之外绘制元素的内边距和边框;border-box:为元素指定的任何内边距和边框都将在已设定的宽度和高度内进行绘制。
  font-family: system-ui; // html基准字体
  font-size: $fontSize; // html基准字体大小
  color: $fontColor; // html基准字体颜色
  line-height: $lineHeight; // html基准行高
}

:not(i) {
  &:before,
  &:after {
    margin: 0; // 清除所有元素外边距
    padding: 0; // 清除所有元素内边距
    outline: none; // 清除所有元素轮廓线
    box-sizing: border-box !important; // 规定盒子模型。content-box:宽度和高度分别应用到元素的内容框。在宽度和高度之外绘制元素的内边距和边框;border-box:为元素指定的任何内边距和边框都将在已设定的宽度和高度内进行绘制。
  }
}

html,
body {
  position: relative; // html,body相对定位,防止body直接子节点乱飞
}

2、index.scss

@import "packages/components/chenxing";

$button-types: (
  success: var(--button-success, green),
  warning: var(--button-warning, yellow),
  fail: var(--button-fail, red));

.button {
  display: inline-block;
  border-radius: 5px;
  padding: .75rem 1rem;

  @each $type, $color in $button-types {
    &.button-#{$type} {
      background-color: $color;
      color: #ffffff;
    }
  }
}

2.3、尺寸

1、index.tsx

import { defineComponent, toRefs } from "vue";
import { PropsType, propsType } from "./type";
import "../style/index.scss";

export default defineComponent({
  name: "XButton",
  props: propsType,
  setup(props: PropsType, { slots }) {
    const { type, size } = toRefs(props);
    console.log(type, size);
    return () => {
      return (
        <div class={`button button-${type.value} button-${size.value}`}>
          {slots.default ? slots.default() : "Button"}
        </div>
      );
    };
  },
});

2、type.ts

import { ExtractPropTypes, PropType } from "vue";

// buttonType
type type = "default" | "success" | "warning" | "fail";

// buttonSize
type size = "small" | "proper" | "large";

// props参数类型
export const propsType = {
  type: {
    type: String as PropType<type>,
    default: "default",
  },
  size: {
    type: String as PropType<size>,
    default: "proper",
  },
};

export type PropsType = ExtractPropTypes<typeof propsType>;

3、index.scss

@import "packages/components/chenxing";

$buttonTypes: (
  success: green,
  warning: yellow,
  fail: red
);

$buttonSizes: (
  small: .25rem .75rem,
  proper: .75rem 1rem,
  large: 1rem 1.25rem,
);

.button {
  display: inline-block;
  border-radius: 5px;
  // default type
  background-color: blue;
  color: #ffffff;
  // default size
  font-size: $fontSize;
  padding: .75rem 1rem;
  margin: .25rem .5rem;

  // $button-types
  @each $type, $color in $buttonTypes {
    &.button-#{$type} {
      background-color: $color;
      color: #ffffff;
    }
  }

  // $button-sizes
  @each $size, $padding in $buttonSizes {
    &.button-#{$size} {
      padding: $padding;
    }
  }
}

2.4、块/行内

1、index.tsx

import { defineComponent, toRefs } from "vue";
import { PropsType, propsType } from "./type";
import "../style/index.scss";

export default defineComponent({
  name: "XButton",
  props: propsType,
  setup(props: PropsType, { slots }) {
    const { type, size, disable, display } = toRefs(props);
    console.log(type, size, disable, display);
    return () => {
      return (
        <div
          class={`button button-${type.value} button-${size.value} button-${
            display.value
          }
          >
          {slots.default ? slots.default() : "Button"}
        </div>
      );
    };
  },
});

2、type.ts

import { ExtractPropTypes, PropType } from "vue";

type type = "default" | "success" | "warning" | "fail";

type size = "small" | "proper" | "large";

type display = "inline" | "block";

// props参数类型
export const propsType = {
  type: {
    type: String as PropType<type>,
    default: "default",
  },
  size: {
    type: String as PropType<size>,
    default: "proper",
  },
  display: {
    type: String as PropType<display>,
    default: "inline-block",
  },
};

export type PropsType = ExtractPropTypes<typeof propsType>;

3、index.scss

@import "packages/components/chenxing";

$buttonTypes: (
  success: green,
  warning: yellow,
  fail: red
);

$buttonSizes: (
  small: .25rem .75rem,
  proper: .75rem 1rem,
  large: 1rem 1.25rem,
);

$buttonDisplay: (inline: inline-block, block: block);

.button {
  border-radius: 5px;
  // default type
  background-color: blue;
  color: #ffffff;
  // default size
  font-size: $fontSize;
  padding: .75rem 1rem;
  margin: .25rem .5rem;
  // default display
  display: inline-block;

  // type
  @each $type, $color in $buttonTypes {
    &.button-#{$type} {
      background-color: $color;
      color: #ffffff;
    }
  }

  // size
  @each $size, $padding in $buttonSizes {
    &.button-#{$size} {
      padding: $padding;
    }
  }

  // display
  @each $display, $displayItem in $buttonDisplay {
    &.button-#{$display} {
      display: $displayItem;
    }
  }
}

2.5、禁用

1、index.tsx

import { defineComponent, toRefs } from "vue";
import { PropsType, propsType } from "./type";
import "../style/index.scss";

export default defineComponent({
  name: "XButton",
  props: propsType,
  setup(props: PropsType, { slots }) {
    const { type, size, disable, display } = toRefs(props);
    console.log(type, size, disable, display);
    const Display = disable.value ? "disable" : "";
    return () => {
      return (
        <div
          class={`button button-${type.value} button-${size.value} button-${display.value} ${Display}`}
        >
          {slots.default ? slots.default() : "Button"}
        </div>
      );
    };
  },
});

2、type.ts

import { ExtractPropTypes, PropType } from "vue";

type type = "default" | "success" | "warning" | "fail";

type size = "small" | "proper" | "large";

type display = "inline" | "block";

// props参数类型
export const propsType = {
  type: {
    type: String as PropType<type>,
    default: "default",
  },
  size: {
    type: String as PropType<size>,
    default: "proper",
  },
  display: {
    type: String as PropType<display>,
    default: "inline-block",
  },
  disable: {
    type: Boolean,
    default: false,
  },
};

export type PropsType = ExtractPropTypes<typeof propsType>;

3、index.scss

@import "packages/components/chenxing";

$buttonTypes: (
  success: green,
  warning: yellow,
  fail: red
);

$buttonSizes: (
  small: .25rem .75rem,
  proper: .75rem 1rem,
  large: 1rem 1.25rem,
);

$buttonDisplay: (inline: inline-block, block: block);

.button {
  border-radius: 5px;
  // default type
  background-color: blue;
  color: #ffffff;
  // default size
  font-size: $fontSize;
  padding: .75rem 1rem;
  margin: .25rem .5rem;
  // default display
  display: inline-block;

  // type
  @each $type, $color in $buttonTypes {
    &.button-#{$type} {
      background-color: $color;
      color: #ffffff;
    }
  }

  // size
  @each $size, $padding in $buttonSizes {
    &.button-#{$size} {
      padding: $padding;
    }
  }

  // display
  @each $display, $displayItem in $buttonDisplay {
    &.button-#{$display} {
      display: $displayItem;
    }
  }

  // disable
  &.disable {
    pointer-events: none;
    opacity: .3;
  }
}

2.6、使用

main.ts

import { createApp } from "vue";
import "./style.css";
import App from "./App.vue";
// import XButton from "../packages/components/button";
import Chenxing from "../packages/components";

createApp(App).use(Chenxing).mount("#app");

App.vue

<script setup lang="ts">
import XButton from "../packages/components/button/src";
</script>

<template>
  <XButton>按钮</XButton>
  <XButton type="success">按钮</XButton>
  <XButton type="warning">按钮</XButton>
  <XButton type="fail">按钮</XButton>
  <br />
  <XButton type="success" size="small">按钮</XButton>
  <XButton type="warning" size="proper">按钮</XButton>
  <XButton type="fail" size="large">按钮</XButton>
  <br />
  <XButton disable type="success">按钮</XButton>
  <XButton :disable="true" type="warning">按钮</XButton>
  <XButton :disable="false" type="fail">按钮</XButton>
  <br />
  <XButton :disable="false" type="fail" display="block">按钮</XButton>
</template>

<style scoped></style>

3、组件统一注册

components下新建index.ts

3.1、index.ts

// 导入button组件
import { App } from "vue";
import XButton from "./button/src/button";

// 组件列表
const components = [XButton];

export default {
  install(app: App) {
    components.forEach((component) => {
      app.component(component.name, component);
    });
  },
};

3.2、使用

1、main.ts

import { createApp } from "vue";
import "./style.css";
import App from "./App.vue";
// import XButton from "../packages/components/button";
import Chenxing from "../packages/components";

createApp(App).use(Chenxing).mount("#app");

2、App.vue

<script setup lang="ts">
import XButton from "../packages/components/button/src/button";
</script>

<template>
  <XButton></XButton>
</template>

<style scoped>

</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/75410.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL8安装和删除教程 下载源码 保姆级(Windows)

删除 停止Mysql服务 管理员的权限来运行cmd&#xff0c;输入 net stop MySQL80 注意你电脑上的MySQL服务不一定是MySQL80,MySQL80是默认的&#xff0c;不是怎么办?在services.msc中找即可 下载一个小工具 geek:Geek下载打开软件&#xff0c;在列表中找到图片中的两项 sc…

【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡)

微服务技术一 技术栈图一、注册中心Eureka概念&#xff1a;搭建EurekaServer服务注册服务发现&#xff08;消费者对提供者的远程调用&#xff09; 二、Ribbon负载均衡负载均衡的原理&#xff1a;LoadBalanced负载均衡的策略&#xff1a;IRule懒加载 三、Nacos注册中心Nacos的安…

excel中定位条件,excel中有哪些数据类型、excel常见错误值、查找与替换

一、如何定位条件 操作步骤&#xff1a;开始 - 查找和选择 - 定位条件&#xff08;ctrl G 或 F5&#xff09; 注&#xff1a;如果F5不可用&#xff0c;可能是这个快捷键被占用了 案例&#xff1a;使用定位条件选择取余中空单元格&#xff0c;填入100&#xff0c;按组合键ct…

【MySQL】MySQL不走索引的情况分析

未建立索引 当数据表没有设计相关索引时&#xff0c;查询会扫描全表。 create table test_temp (test_id int auto_incrementprimary key,field_1 varchar(20) null,field_2 varchar(20) null,field_3 bigint null,create_date date null );expl…

Python源码05:使用Pyecharts画词云图图

**Pyecharts是一个用于生成 Echarts 图表的 Python 库。Echarts 是一个基于 JavaScript 的数据可视化库&#xff0c;提供了丰富的图表类型和交互功能。**通过 Pyecharts&#xff0c;你可以使用 Python 代码生成各种类型的 Echarts 图表&#xff0c;例如折线图、柱状图、饼图、散…

通过 Amazon SageMaker JumpStart 部署 Llama 2 快速构建专属 LLM 应用

来自 Meta 的 Llama 2 基础模型现已在 Amazon SageMaker JumpStart 中提供。我们可以通过使用 Amazon SageMaker JumpStart 快速部署 Llama 2 模型&#xff0c;并且结合开源 UI 工具 Gradio 打造专属 LLM 应用。 Llama 2 简介 Llama 2 是使用优化的 Transformer 架构的自回归语…

el-table实现懒加载(el-table-infinite-scroll)

2023.8.15今天我学习了用el-table对大量的数据进行懒加载。 效果如下&#xff1a; 1.首先安装&#xff1a; npm install --save el-table-infinite-scroll2 2.全局引入&#xff1a; import ElTableInfiniteScroll from "el-table-infinite-scroll";// 懒加载 V…

通过网关访问微服务,一次正常,一次不正常 (nacos配置的永久实例却未启动导致)

微服务直接访问没问题&#xff0c;通过网关访问&#xff0c;就一次正常访问&#xff0c;一次401错误&#xff0c;交替正常和出错 负载均衡试了 路由配置检查了 最后发现nacos下竟然有2个order服务实例&#xff0c;我明明只开启了一个呀 原来之前的8080端口微服务还残留&…

开工大吉|华润鞋业二期自动化改造项目开工典礼圆满举行

2023年8月10日上午&#xff0c;山东百华鞋业有限公司择良辰吉时隆重举行了华润鞋业二期厂房动工仪式&#xff0c;公司总经理郭兴梅女士携公司管理层代表和施工单位代表参加了动工仪式。 根据公司发展规划&#xff0c;对未来发展的美好期许&#xff0c;以及公司生产与研发保持的…

ApacheCon - 云原生大数据上的 Apache 项目实践

Apache 软件基金会的官方全球系列大会 CommunityOverCode Asia&#xff08;原 ApacheCon Asia&#xff09;首次中国线下峰会将于 2023 年 8 月 18-20 日在北京丽亭华苑酒店举办&#xff0c;大会含 17 个论坛方向、上百个前沿议题。 字节跳动云原生计算团队在此次 CommunityOve…

手机里视频太大怎么压缩?压缩教程分享

现在视频文件的体积越来越大了&#xff0c;动不动就是几个GB起步&#xff0c;如果后期再剪辑处理一下&#xff0c;更是会占据更多的设备空间了&#xff0c;还会导致我们传输受到限制&#xff0c;这时候就需要我们对视频进行压缩处理&#xff0c;下面给大家分享几个简单的方法&a…

Python爬虫——scrapy_基本使用

安装scrapy pip install scrapy创建scrapy项目&#xff0c;需要在终端里创建 注意&#xff1a;项目的名字开头不能是数字&#xff0c;也不能包含中文 scrapy startproject 项目名称 示例&#xff1a; scrapy startproject scra_baidu_36创建好后的文件 3. 创建爬虫文件&…

go的gin和gorm框架实现切换身份的接口

使用go的gin和gorm框架实现切换身份的接口&#xff0c;接收前端发送的JSON对象&#xff0c;查询数据库并更新&#xff0c;返回前端信息 接收前端发来的JSON对象&#xff0c;包含由openid和登陆状态组成的一个string和要切换的身份码int型 后端接收后判断要切换的身份是否低于该…

vue3+vite配置vantUI主题

❓在项目中统一配置UI主题色&#xff0c;各个组件配色统一修改 vantUI按需安装 参考vantUI文档 创建vantVar.less文件夹进行样式编写 vantVar.less :root:root{//导航--van-nav-bar-height: 44px;//按钮--van-button-primary-color: #ffffff;--van-button-primary-backgr…

CentOS系统环境搭建(三)——Centos7安装DockerDocker Compose

centos系统环境搭建专栏&#x1f517;点击跳转 Centos7安装Docker&Docker Compose 使用 yum 安装Docker 内核 [rootVM-4-17-centos ~]# uname -r 3.10.0-1160.88.1.el7.x86_64Docker 要求 CentOS 系统的内核版本高于 3.10 更新 yum yum update安装需要的软件包&#x…

kubernetes的存储卷使用

目录 一、为什么使用存储卷 二、emptyDir存储卷 1.概念 2.创建Pod emptyDir 3. 验证emptyDir存储卷 三、hostPath存储卷 1.概念 2.创建Pod hostPath 3.验证hostPath存储卷 三、nfs共享存储卷 1.概念 2.安装nfs&#xff0c;配置nfs服务 3.创建Pod 4.验证nfs存储卷 一、…

Electron-builder打包和自动更新

前言 文本主要讲述如何为 electron 打包出来软件配置安装引导和结合 github 的 release 配置自动更新。 electron-builder 是将 Electron 工程打包成相应平台的软件的工具&#xff0c;我的工程是使用 electron-vite 构建的&#xff0c;其默认集成了 electron-builder &#x…

欧拉算法与埃氏筛法比较

#include<iostream> using namespace std; bool data[100000005]; // zhishu用于存储质数的数组 &#xff0c;cnt下标 int zhishu[100000000],cnt0;int main() {data[1] 1;// 1表示素数 int n;cin >> n;// 循环遍历for(int i2;i<n;i){if(data[i] 0){// 表明是…

SDXL1.0大模型安装与使用

个人网站&#xff1a; 文章目录 前言一、模型下载使用&#xff08;简单体验&#xff09;二、模型下载使用&#xff08;繁琐版&#xff09;三、ComfyUI 前言 使用 Stable Diffusion XL&#xff0c;您可以使用较短的提示创建描述性图像&#xff0c;并在图像中生成文字。该模型在…

vue自定义穿梭框支持远程滚动加载

分享-2023年资深前端进阶&#xff1a;前端登顶之巅-最全面的前端知识点梳理总结&#xff0c;前端之巅 *分享一个使用比较久的&#x1fa9c; 技术框架公司的选型(老项目)&#xff1a;vue2 iview-ui 方案的实现思路是共性的&#xff0c;展现UI样式需要你们自定义进行更改&#…