「Vue3」手把手教你使用 Vite 快速搭建项目

news2025/1/16 12:52:18

本项目选型默认使用vue3 + typescript + vite

1. 使用vite初始化项目

vite创建地址,创建完成后有一个基本的项目结构了,如下图
在这里插入图片描述

2. 配置vite.config.ts,配置详解

import { defineConfig } from 'vite'

import path from 'path';

import vue from '@vitejs/plugin-vue'

import vueJsx from '@vitejs/plugin-vue-jsx'



// https://vitejs.dev/config/

export default defineConfig({

  plugins: [vue(), vueJsx()],

  resolve: {

  //设置文件路径解析,需要配合tsconfig.json的paths结合解析

    alias: {

      '@': path.resolve(__dirname, 'src'),

      components: path.resolve(__dirname, 'src/components'),

    }

  },

  //相关打包配置

  build: {

    sourcemap: true,

    // Turning off gzip-compressed size display can slightly reduce packaging time

    reportCompressedSize: false,

    chunkSizeWarningLimit: 2000,

  },

  //服务器相关配置,vite3默认端口5173

  server: {

    host: true,

  }

})

发现报错了 Cannot find module path or its corresponding type declarations

那么需要安装@types/node并且在tsconfig.json中的types中添加’node’,如下配置

3. 配置tsconfig.json

{

  "compilerOptions": {

    "rootDir": ".", // 根目录地址

    "target": "ESNext", // 指定 ECMAScript 目标版本

    "useDefineForClassFields": true, // 对类字段使用定义

    "noImplicitAny": false, // 在表达式和声明上有隐含的 any类型时不报错

    "module": "ESNext", // 指定使用模块

    "moduleResolution": "Node", // 选择模块解析策略: 'node' (Node.js)

    "strict": true, // 启用所有严格类型检查选项

    "jsx": "preserve", // 指定 jsx 代码的生成

    "sourceMap": true, // 生成相应的 '.map' 文件

    "resolveJsonModule": true, // 解析 JSON 模块

    "isolatedModules": true, // 将每个文件作为单独的模块

    "esModuleInterop": true, // ES 模块互操作

    "lib": ["ESNext", "DOM"], // 指定要包含在编译中的库文件

    "skipLibCheck": true, // 过默认库检查

    "types": ["node", "naive-ui/volar"], // 需要包含的类型声明文件名列表

    "baseUrl": ".", // 用于解析非相对模块名称的基目录

    "importHelpers": true, // 导入帮助

    "strictNullChecks": true, // 启用严格的 null 检查

    "allowSyntheticDefaultImports": true, // 允许合成默认导入

    "allowJs": false, //允许js文件

    "noEmit": true, // 不要发出编译器输出文件

    "paths": { //路径映射

      "@/*": ["src/*"],

      "components/*": ["src/components/*"]

    }

  },

  //指定需要包含的文件

  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],

  "references": [{ "path": "./tsconfig.node.json" }] // 引用其他tsconfig配置,参考

}

4. 配置git提交检查

前端一般使用yorkie和husky来对git提交进行lint检查,差异可看yorkie的文档介绍

npm install yorkie lint-staged --save-dev

//在package.json中配置

"gitHooks": {

    "pre-commit": "lint-staged",

    "commit-msg": "node scripts/verifyCommit.js"

  },

 "lint-staged": {

    "*.{js,jsx,ts,tsx}": [

      "eslint --fix",

      "prettier --write"

    ],

    "package.json": [

      "prettier --write"

    ],

    "*.vue": [

      "eslint --fix",

      "prettier --write",

      "stylelint --fix"

    ],

    "*.{scss,less,styl,html}": [

      "stylelint --fix",

      "prettier --write"

    ],

    "*.md": [

      "prettier --write"

    ]

  }

scripts里面的erifyCommit.js和.github/commit-convention.md文件参考vue3

5. 配置eslint进行代码规范化

pnpm add -D eslint @antfu/eslint-config eslint-plugin-prettier eslint-config-prettier //直接安装使用即可

module.exports = {

  "extends": [

      "@antfu",

      "prettier" //eslint走prettier,关闭所有不必要或可能与Prettier冲突的规则,eslint-config-prettier

      "plugin:prettier/recommended" // 其实是一些已经配置好的规则插件等,使用recommended配置

  ]

}

6. 配置prettier进行代码格式化

prettier可配置规则

// prettier.config.js

module.exports = {

  printWidth: 120, // 设置每行显示最长的长度

  tabWidth: 2, // eslint/rules/indent 指定每个缩进级别的空格数

  useTabs: false, // 用 tabs 之后很多问题,例如按 tab 后不能一次性定位到正确缩进位置,建议用 space

  semi: false, // 与 trailingComma 相对应,应该加上行尾分号

  trailingComma: 'all', // eslint/rules/comma-dangle,行尾加上逗号

  singleQuote: true, // eslint/rules/quotes 使用单引号

  jsxSingleQuote: true, // jsx使用单引号

  arrowParens: 'avoid', // 在唯一的箭头函数参数周围包含括号

};

7. 配置style规则,实现快速格式化css

module.exports = {

  root: true,

  plugins: ['stylelint-order'],

  extends: ["stylelint-config-standard", "stylelint-config-prettier", "stylelint-config-recommended-vue"],

  customSyntax: 'postcss-html',

  rules: {

    'selector-pseudo-class-no-unknown': [

      true,

      {

        ignorePseudoClasses: ['deep', 'v-slotted'],

      },

    ],

    'selector-pseudo-element-no-unknown': [

      true,

      {

        ignorePseudoElements: ['v-deep', ':deep'],

      },

    ],

    'at-rule-no-unknown': [

      true,

      {

        ignoreAtRules: [

          'tailwind',

          'apply',

          'variants',

          'responsive',

          'screen',

          'function',

          'if',

          'each',

          'include',

          'mixin',

          'extend',

          ':deep',

        ],

      },

    ],

    'value-keyword-case': null,

    'no-empty-source': null,

    'no-duplicate-selectors': null,

    'named-grid-areas-no-invalid': null,

    'unicode-bom': 'never',

    'no-descending-specificity': null,

    'font-family-no-missing-generic-family-keyword': null,

    'declaration-colon-space-after': 'always-single-line',

    'declaration-colon-space-before': 'never',

    // 'declaration-block-trailing-semicolon': 'always',

    'custom-property-empty-line-before': 'never',

    'rule-empty-line-before': null,

    'unit-no-unknown': [true, { ignoreUnits: ['rpx'] }],

    'order/order': [

      [

        'dollar-variables',

        'custom-properties',

        'at-rules',

        'declarations',

        {

          type: 'at-rule',

          name: 'supports',

        },

        {

          type: 'at-rule',

          name: 'media',

        },

        'rules',

      ],

      { severity: 'warning' },

    ],

    'selector-class-pattern': null,

    'function-name-case': null,

    'declaration-empty-line-before': null,

    'color-function-notation': null,

    'alpha-value-notation': null,

    'order/properties-order': [

      'position',

      'top',

      'right',

      'bottom',

      'left',

      'z-index',

      'display',

      'visibility',

      'float',

      'clear',

      'overflow',

      '-ms-overflow-x',

      '-ms-overflow-y',

      'overflow-x',

      'overflow-y',

      '-webkit-overflow-scrolling',

      'clip',

      '-webkit-align-content',

      '-ms-flex-line-pack',

      'align-content',

      '-webkit-box-align',

      '-moz-box-align',

      '-webkit-align-items',

      'align-items',

      '-ms-flex-align',

      '-webkit-align-self',

      '-ms-flex-item-align',

      '-ms-grid-row-align',

      'align-self',

      '-webkit-box-flex',

      '-webkit-flex',

      '-moz-box-flex',

      '-ms-flex',

      'flex',

      '-webkit-flex-flow',

      '-ms-flex-flow',

      'flex-flow',

      '-webkit-flex-basis',

      '-ms-flex-preferred-size',

      'flex-basis',

      '-webkit-box-orient',

      '-webkit-box-direction',

      '-webkit-flex-direction',

      '-moz-box-orient',

      '-moz-box-direction',

      '-ms-flex-direction',

      'flex-direction',

      '-webkit-flex-grow',

      '-ms-flex-positive',

      'flex-grow',

      '-webkit-flex-shrink',

      '-ms-flex-negative',

      'flex-shrink',

      '-webkit-flex-wrap',

      '-ms-flex-wrap',

      'flex-wrap',

      '-webkit-box-pack',

      '-moz-box-pack',

      '-ms-flex-pack',

      '-webkit-justify-content',

      'justify-content',

      '-webkit-box-ordinal-group',

      '-webkit-order',

      '-moz-box-ordinal-group',

      '-ms-flex-order',

      'order',

      '-webkit-box-sizing',

      '-moz-box-sizing',

      'box-sizing',

      'margin',

      'margin-top',

      'margin-right',

      'margin-bottom',

      'margin-left',

      'padding',

      'padding-top',

      'padding-right',

      'padding-bottom',

      'padding-left',

      'min-width',

      'min-height',

      'max-width',

      'max-height',

      'width',

      'height',

      'outline',

      'outline-width',

      'outline-style',

      'outline-color',

      'outline-offset',

      'border',

      'border-spacing',

      'border-collapse',

      'border-width',

      'border-style',

      'border-color',

      'border-top',

      'border-top-width',

      'border-top-style',

      'border-top-color',

      'border-right',

      'border-right-width',

      'border-right-style',

      'border-right-color',

      'border-bottom',

      'border-bottom-width',

      'border-bottom-style',

      'border-bottom-color',

      'border-left',

      'border-left-width',

      'border-left-style',

      'border-left-color',

      '-webkit-border-radius',

      '-moz-border-radius',

      'border-radius',

      '-webkit-border-top-left-radius',

      '-moz-border-radius-topleft',

      'border-top-left-radius',

      '-webkit-border-top-right-radius',

      '-moz-border-radius-topright',

      'border-top-right-radius',

      '-webkit-border-bottom-right-radius',

      '-moz-border-radius-bottomright',

      'border-bottom-right-radius',

      '-webkit-border-bottom-left-radius',

      '-moz-border-radius-bottomleft',

      'border-bottom-left-radius',

      '-webkit-border-image',

      '-moz-border-image',

      '-o-border-image',

      'border-image',

      '-webkit-border-image-source',

      '-moz-border-image-source',

      '-o-border-image-source',

      'border-image-source',

      '-webkit-border-image-slice',

      '-moz-border-image-slice',

      '-o-border-image-slice',

      'border-image-slice',

      '-webkit-border-image-width',

      '-moz-border-image-width',

      '-o-border-image-width',

      'border-image-width',

      '-webkit-border-image-outset',

      '-moz-border-image-outset',

      '-o-border-image-outset',

      'border-image-outset',

      '-webkit-border-image-repeat',

      '-moz-border-image-repeat',

      '-o-border-image-repeat',

      'border-image-repeat',

      '-webkit-border-top-image',

      '-moz-border-top-image',

      '-o-border-top-image',

      'border-top-image',

      '-webkit-border-right-image',

      '-moz-border-right-image',

      '-o-border-right-image',

      'border-right-image',

      '-webkit-border-bottom-image',

      '-moz-border-bottom-image',

      '-o-border-bottom-image',

      'border-bottom-image',

      '-webkit-border-left-image',

      '-moz-border-left-image',

      '-o-border-left-image',

      'border-left-image',

      '-webkit-border-corner-image',

      '-moz-border-corner-image',

      '-o-border-corner-image',

      'border-corner-image',

      '-webkit-border-top-left-image',

      '-moz-border-top-left-image',

      '-o-border-top-left-image',

      'border-top-left-image',

      '-webkit-border-top-right-image',

      '-moz-border-top-right-image',

      '-o-border-top-right-image',

      'border-top-right-image',

      '-webkit-border-bottom-right-image',

      '-moz-border-bottom-right-image',

      '-o-border-bottom-right-image',

      'border-bottom-right-image',

      '-webkit-border-bottom-left-image',

      '-moz-border-bottom-left-image',

      '-o-border-bottom-left-image',

      'border-bottom-left-image',

      'background',

      "-ms-filter:'progid:DXImageTransform.Microsoft.Alpha",

      'filter:progid:DXImageTransform.Microsoft.Alpha(Opacity',

      '-ms-interpolation-mode',

      '-webkit-filter',

      '-ms-filter',

      'filter',

      'background-color',

      'background-image',

      'background-attachment',

      'background-position',

      '-ms-background-position-x',

      '-ms-background-position-y',

      'background-position-x',

      'background-position-y',

      '-webkit-background-clip',

      '-moz-background-clip',

      'background-clip',

      'background-origin',

      '-webkit-background-size',

      '-moz-background-size',

      '-o-background-size',

      'background-size',

      'background-repeat',

      'object-fit',

      'box-decoration-break',

      '-webkit-box-shadow',

      '-moz-box-shadow',

      'box-shadow',

      'color',

      'table-layout',

      'caption-side',

      'empty-cells',

      'list-style',

      'list-style-position',

      'list-style-type',

      'list-style-image',

      'quotes',

      'content',

      'counter-increment',

      'counter-reset',

      '-ms-writing-mode',

      'vertical-align',

      'text-align',

      '-webkit-text-align-last',

      '-moz-text-align-last',

      '-ms-text-align-last',

      'text-align-last',

      'text-decoration',

      'text-emphasis',

      'text-emphasis-position',

      'text-emphasis-style',

      'text-emphasis-color',

      'text-indent',

      '-ms-text-justify',

      'text-justify',

      'text-outline',

      'text-transform',

      'text-wrap',

      '-ms-text-overflow',

      'text-overflow',

      'text-overflow-ellipsis',

      'text-overflow-mode',

      'text-shadow',

      'white-space',

      'word-spacing',

      '-ms-word-wrap',

      'word-wrap',

      '-ms-word-break',

      'word-break',

      '-moz-tab-size',

      '-o-tab-size',

      'tab-size',

      '-webkit-hyphens',

      '-moz-hyphens',

      'hyphens',

      'letter-spacing',

      'font',

      'font-weight',

      'font-style',

      'font-variant',

      'font-size-adjust',

      'font-stretch',

      'font-size',

      'font-family',

      'src',

      'line-height',

      'opacity',

      '-ms-interpolation-mode',

      'resize',

      'cursor',

      'nav-index',

      'nav-up',

      'nav-right',

      'nav-down',

      'nav-left',

      '-webkit-transition',

      '-moz-transition',

      '-ms-transition',

      '-o-transition',

      'transition',

      '-webkit-transition-delay',

      '-moz-transition-delay',

      '-ms-transition-delay',

      '-o-transition-delay',

      'transition-delay',

      '-webkit-transition-timing-function',

      '-moz-transition-timing-function',

      '-ms-transition-timing-function',

      '-o-transition-timing-function',

      'transition-timing-function',

      '-webkit-transition-duration',

      '-moz-transition-duration',

      '-ms-transition-duration',

      '-o-transition-duration',

      'transition-duration',

      '-webkit-transition-property',

      '-moz-transition-property',

      '-ms-transition-property',

      '-o-transition-property',

      'transition-property',

      '-webkit-transform',

      '-moz-transform',

      '-ms-transform',

      '-o-transform',

      'transform',

      '-webkit-transform-origin',

      '-moz-transform-origin',

      '-ms-transform-origin',

      '-o-transform-origin',

      'transform-origin',

      '-webkit-animation',

      '-moz-animation',

      '-ms-animation',

      '-o-animation',

      'animation',

      '-webkit-animation-name',

      '-moz-animation-name',

      '-ms-animation-name',

      '-o-animation-name',

      'animation-name',

      '-webkit-animation-duration',

      '-moz-animation-duration',

      '-ms-animation-duration',

      '-o-animation-duration',

      'animation-duration',

      '-webkit-animation-play-state',

      '-moz-animation-play-state',

      '-ms-animation-play-state',

      '-o-animation-play-state',

      'animation-play-state',

      '-webkit-animation-timing-function',

      '-moz-animation-timing-function',

      '-ms-animation-timing-function',

      '-o-animation-timing-function',

      'animation-timing-function',

      '-webkit-animation-delay',

      '-moz-animation-delay',

      '-ms-animation-delay',

      '-o-animation-delay',

      'animation-delay',

      '-webkit-animation-iteration-count',

      '-moz-animation-iteration-count',

      '-ms-animation-iteration-count',

      '-o-animation-iteration-count',

      'animation-iteration-count',

      '-webkit-animation-direction',

      '-moz-animation-direction',

      '-ms-animation-direction',

      '-o-animation-direction',

      'animation-direction',

      'pointer-events',

      'unicode-bidi',

      'direction',

      '-webkit-columns',

      '-moz-columns',

      'columns',

      '-webkit-column-span',

      '-moz-column-span',

      'column-span',

      '-webkit-column-width',

      '-moz-column-width',

      'column-width',

      '-webkit-column-count',

      '-moz-column-count',

      'column-count',

      '-webkit-column-fill',

      '-moz-column-fill',

      'column-fill',

      '-webkit-column-gap',

      '-moz-column-gap',

      'column-gap',

      '-webkit-column-rule',

      '-moz-column-rule',

      'column-rule',

      '-webkit-column-rule-width',

      '-moz-column-rule-width',

      'column-rule-width',

      '-webkit-column-rule-style',

      '-moz-column-rule-style',

      'column-rule-style',

      '-webkit-column-rule-color',

      '-moz-column-rule-color',

      'column-rule-color',

      'break-before',

      'break-inside',

      'break-after',

      'page-break-before',

      'page-break-inside',

      'page-break-after',

      'orphans',

      'widows',

      '-ms-zoom',

      'zoom',

      'max-zoom',

      'min-zoom',

      'user-zoom',

      'orientation',

    ],

  },

  ignoreFiles: ['dist/**/*','**/*.js', '**/*.jsx', '**/*.tsx', '**/*.ts', './*.js'],

}

8. CICD

首先是处于.github/workflows文件夹下面,所以如果没有这个文件夹,那么你需要先建立对应的文件夹
然后在创建一个ci.yml文件,写的时候需要写yml语法,需要学习的话可以菜鸟教材

// ci.yml
name: CI

on:
 push:
   branches:
     - main

 pull_request:
   branches:
     - main

jobs:
 lint:
   runs-on: ubuntu-latest

   steps:
     - uses: actions/checkout@v3

     - name: Install pnpm
       uses: pnpm/action-setup@v2

     - name: Set node
       uses: actions/setup-node@v3
       with:
         node-version: 18.x
         cache: pnpm

     - name: Setup
       run: npm i -g pnpm

     - name: Lint
       run: pnpm run lint

 test:
   runs-on: ubuntu-latest

   strategy:
     matrix:
       node: [14.x, 16.x, 18.x]
     fail-fast: false

   steps:
     - uses: actions/checkout@v3

     - name: Install pnpm
       uses: pnpm/action-setup@v2

     - name: Set node version to ${{ matrix.node }}
       uses: actions/setup-node@v3
       with:
         node-version: ${{ matrix.node }}
         cache: pnpm

     - name: Setup
       run: npm i -g pnpm

     - name: Build
       run: pnpm run build

     - name: Typecheck
       run: nr typecheck

     - name: Test
       run: pnpm run test
// cd.yml
name: Publish Package

on:
  push:
    tags:
      - v*

jobs:
  publish-npm:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Install pnpm
        uses: pnpm/action-setup@v2

      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          registry-url: https://registry.npmjs.org/
          cache: pnpm

      - run: pnpm install

      - run: npx changelogithub --no-group
        continue-on-error: true
        env:
          GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

      - run: pnpm run publish
        env:
          NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
          NODE_OPTIONS: --max-old-space-size=6144


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【PS-6】视图操作

目录 旋转视图工具 选项栏中的“滚动所有窗口 用【空格键】移动视图 将图片放大缩小的方法 1、缩放工具 2、通过鼠标右键对画面进行放大或缩小 3、【细微缩放】按钮 4、通过【CTRL /-】放大缩小 5、窗口→导航器 旋转视图工具 此工具常用于与数位板的结合使用 位置&…

北大惠普金融指数-匹配企业绿色创新指数2011-2020年:企业名称、年份、行业分类等多指标数据

1、数据来源:北京大学数字金融中心、国家统计局、国家专利产权局等部门公开数据 2、时间跨度:2011-2020年 3、区域范围:全国 4、指标说明: 中国内地31个省(直辖市、自治区,简称“省”)、337…

Rust机器学习之Linfa

Rust机器学习之Linfa 众所周知,Python之所以能成为机器学习的首选语言,与其丰富易用的库有很大关系。某种程度上可以说是诸如numpy、pandas、scikit-learn、matplotlib、pytorch、networks…等一系列科学计算和机器学习库成就了Python今天编程语言霸主的…

【MAX7800实现KWS20 demo演示】

【MAX7800实现KWS20 demo演示】1. 概述2. 关键字定位演示2.1 构建固件:2.2 选择板卡2.3 MAX78000 EVKIT2.3.1 MAX78000 EVKIT下载程序2.3.2 MAX78000 EVKIT 跳线设置2.3.3 MAX78000 EVKIT 操作2.4 MAX78000 Feather2.4.1 MAX78000 Feather羽毛板下载固件2.4.2 MAX78…

IBM MQ MQCSP

一,概念 1.1 用途 用途:MQCSP 结构使授权服务能够验证用户 ID 和密码。您在 MQCONNX 调用上指定 MQCSP 连接安全参数结构。 警告:在某些情况下,客户端应用程序的 MQCSP 结构中的密码将以纯文本形式通过网络发送。要确保客户端应…

【学习笔记58】JavaScript面向对象

一、认识面向对象 (一)面向过程编程 按照程序执行的过程一步一步的完成程序代码 (二)面向对象编程 面向对象编程是一种编程的方式/模式官方:对一类具有相同属性和功能的程序代码抽象的描述,实现代码编程…

Triangle Attack: A Query-efficient Decision-based Adversarial Attack

Triangle Attack: A Query-efficient Decision-based Adversarial Attack 三角攻击:一种查询高效的基于决策的对抗性攻击 Abstract 基于决策的攻击对实际应用程序构成了严重的威胁,因为它将目标模型视为一个黑箱,只访问硬预测标签。最近已经做出了很大…

【计组】指令和运算1--《深入浅出计算机组成原理》(二)

一、计算机指令 1、指令 从软件工程师的角度来讲,CPU就是一个执行各种计算机指令(Instruction Code)的逻辑.。 这里的计算机指令,也可以叫做机器语言。 不同发CPU支持的机器语言不同,如个人电脑用的是Intel的CPU&a…

同样Java后端开发三年,朋友已经涨薪到了30k,而我才刚到12K。必须承认多背背八股文确实有奇效!

程序猿在世人眼里已经成为高薪、为人忠诚的代名词。 然而,小编要说的是,不是所有的程序员工资都是一样的。 世人所不知的是同为程序猿,薪资的差别还是很大的。 众所周知,目前互联网行业是众多行业中薪资待遇最好的,…

2022年NPDP新版教材知识集锦--【第四章节】(2)

【概念设计阶段】(全部获取文末) 概念描述提供了产品概念的优点和特征的定性描述,其必要性体现在: ①为开发团队的所有成员以及与项目相关的成员提供了清晰性和一致性。 ②是向潜在客户解释产品的重要手段之一。 典型流程: 2.1概念工程 …

python使用websocket服务并在fastAPI中启动websocket服务

依赖 pip install websockets-routes 代码 import asyncio import websockets import websockets_routes from websockets.legacy.server import WebSocketServerProtocol from websockets_routes import RoutedPath# 初始化一个router对象 router websockets_routes.Router()…

Archlinux安装软件的那些事

个人主页:董哥聊技术我是董哥,嵌入式领域新星创作者创作理念:专注分享高质量嵌入式文章,让大家读有所得!文章目录1、ArchLinux1.1 ArchLinux原则1.2 软件包管理1.2.1 软件仓库1.2.2 包管理器2、Pacman2.1 pacman介绍2.…

什么是幂等性?四种接口幂等性方案详解!

幂等性在我们的工作中无处不在,无论是支付场景还是下订单等核心场景都会涉及,也是分布式系统最常遇到的问题,除此之外,也是大厂面试的重灾区。 知道了幂等性的重要性,下面我就详细介绍幂等性以及具体的解决方案&#…

SpringBoot中自动配置

第一种: 给容器中的组件加上 ConfigurationProperties注解即可 测试: Component ConfigurationProperties(prefix "mycar") public class Car {private String brand;private Integer price;private Integer seatNum;public Integer getSeat…

币圈已死,绿色积分是全新的赛道吗?

近几年来,移动互联网行业的迅猛发展,快速改变着社会业态。尽管如此,仍有大量企业线上线下处于割裂状态,2020 年一场疫情的突然爆发,并持续到 2022年,对零售行业造成流量崩塌、供应链中断、市场供需下滑等压…

现代 CSS 高阶技巧,完美的波浪进度条效果。

将专注于实现复杂布局,兼容设备差异,制作酷炫动画,制作复杂交互,提升可访问性及构建奇思妙想效果等方面的内容。 在兼顾基础概述的同时,注重对技巧的挖掘,结合实际进行运用,欢迎大家关注。 正…

金属非金属如何去毛刺 机器人浮动去毛刺

毛刺的产生 在金属非金属零件的加工中,由于切削加工过程中塑性变形引起的毛边,或者是铸造、模锻等加工的飞边,或是焊接挤出的残料,这些与所要求的形状、尺寸有所出入,在被加工零件上派生出的多余部分即为毛刺&#xf…

音视频开发之 ALSA实战!

前言: 今天我们来分享一个开源的音频采集代码,现在大部分音频采集都是通过ALSA框架去采集,如果大家把ALSA采集代码学懂,那么大部分的音频采集都可以搞定。这个代码是用ALSA进行音频PCM的采集并保存到本地文件。一、alsa框架的介绍…

C#语言实例源码系列-实现输入框焦点变色和窗体拖拽改变大小

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中…

002.组合总和|||——回溯算法

1.题目链接: 216. 组合总和 III 2.解题思路: 2.1.题目要求: 给一个元素数量k和一个元素和n,要求从范围[1,2,3,4,5,6,7,8,9]中返回所有元素数量为k和元素和为n的组合。(每个数字只能使用一次) 比如输入k…