vite6+vue3+ts+prettier+eslint9配置前端项目(后台管理系统、移动端H5项目通用配置)
很多小伙伴苦于无法搭建一个规范的前端项目,导致后续开发不规范,今天给大家带来一个基于Vite6+TypeScript+Vue3+ESlint9+Prettier的搭建教程。
目录
- 一、基础配置
- 1、初始化项目
- 2、代码质量风格的统一
- 2.1、配置prettier
- 2.2、配置eslint
- 2.3、配置typescript
- 3、配置代码检查器
- 4、修改路由配置信息
- 二、重置浏览器默认样式
- 三、安装样式预处理器
- 四、ui组件库安装
- 1、element-plus组件库配置
- 2、vant组件库配置
- 五、二次封装axios
- 六、配置环境变量
- 1、创建配置文件
- 2、**使用变量**
- 3、修改package.json启动命令
- 七、拓展实用插件(按需安装配置)
- 1、dayjs 时间处理
- 2、qs
- 3、lodash实用工具库
- 4、big.js(涉及计算相关)
- 5、js-cookie
- 6、postcss-plugin-px2rem
- 7、@vitejs/plugin-legacy(兼容旧浏览器,移动端项目重点推荐!!!)
环境依赖版本
- node:v18.20.0
- vite:^6.0.5
- typescript:~5.6.2
- vue:^3.5.13
- eslint: ^9.14.0,
- vite-plugin-checker: ^0.8.0"
一、基础配置
最新版vue官方已放弃webpack作为构建工具,vue官方之前一直是以webpack,但是近期我发现vue官网已经更新了相关内容,目前开始主推vite作为脚手架构建的工具,使用官方推荐的脚手架会更加方便,脚手架可自行选择ts、pinia 、router等相关配置,不用再像之前一样从头到尾进行安装,简单又方便!!!
官方地址:https://cn.vuejs.org/guide/quick-start.html
1、初始化项目
注意:此处使用node版本需要>18.3
pnpm create vue@latest
运行指令后接下来就是根据需要安装所需的功能
初始化完成的结构如图所示
2、代码质量风格的统一
eslint可以保证项目的质量,prettier可以保证项目的统一格式、风格。
每个公司的开发规则各有不同,此处根据各自的需求自行配置,下方是我常用的风格配置(仅供参考)
2.1、配置prettier
- 安装
eslint prettier插件安装、用来解决与eslint的冲突、安装prettier
pnpm add eslint-plugin-prettier eslint-config-prettier prettier -D
- 新增.prettierrc.json文件
{"$schema": "https://json.schemastore.org/prettierrc","semi": true,"tabWidth": 2,"singleQuote": true,"printWidth": 150,"bracketSpacing": true,"arrowParens": "always","endOfLine": "lf","trailingComma": "all","bracketSameLine": false,"embeddedLanguageFormatting": "auto","useTabs": false,"htmlWhitespaceSensitivity": "ignore"
}
2.2、配置eslint
- 规则
- “off” 或 0 - 关闭规则
- “warn” 或 1 - 打开规则作为警告(不影响退出代码)
- “error” 或 2 - 打开规则作为错误(触发时退出代码为 1)
- 安装
// eslint vue插件安装
pnpm add eslint eslint-plugin-vue -D
//eslint 识别ts语法
pnpm add @typescript-eslint/parser
//eslint ts默认规则补充
pnpm add @typescript-eslint/eslint-plugin -D
自 ESLint v9.0.0 以后,平面配置文件格式一直是默认的配置文件格式。配置文件格式已从
eslintrc
更改为flat config
。默认情况下,ESLint CLI 将搜索 eslint.config.(js | cjs | mjs) 而不是 .eslintrc.* 文件。如果未找到 eslint.config.js 文件,CLI 会将其视为错误,并且不会运行。
以下是官方给出的具体介绍。https://eslint.org/docs/latest/use/configure/migration-guide
可参考以下文章:
探索 Antfu ESLint 配置:一款极为便捷的 ESLint 设置方案
ESLint 扁平化配置使用指南
- 修改eslint.config.js配置信息
import pluginVue from 'eslint-plugin-vue';
import typescriptEslint from '@typescript-eslint/eslint-plugin';
import prettier from 'eslint-plugin-prettier';
import vueTsEslintConfig from '@vue/eslint-config-typescript';
import skipFormatting from '@vue/eslint-config-prettier/skip-formatting';
import vueEslintParser from 'vue-eslint-parser';
import tsEslintParser from '@typescript-eslint/parser';export default [{name: 'app/files-to-lint',files: ['**/*.{ts,mts,tsx,vue,js,jsx}'],},{name: 'app/files-to-ignore',ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**', 'node_modules'],// plugins: ['vue', '@typescript-eslint', 'prettier'],},...pluginVue.configs['flat/essential'],...vueTsEslintConfig(),skipFormatting,{name: 'app/plugins',plugins: {vue: pluginVue,'@typescript-eslint': typescriptEslint,prettier,},},{name: 'app/parser-config-vue',languageOptions: {parser: vueEslintParser,},},{name: 'app/parser-config-ts',files: ['**/*.{ts,mts,tsx}'],languageOptions: {parser: tsEslintParser,parserOptions: {ecmaVersion: 'latest',sourceType: 'module',ecmaFeatures: {jsx: true,},},},},{name: 'app/custom-rules',rules: {'no-console': process.env.NODE_ENV === 'production' ? 'off' : 'off','no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off','key-spacing': ['error',{beforeColon: false,afterColon: true,},],'space-in-parens': ['error', 'never'],'object-curly-spacing': ['error', 'always'],'object-curly-newline': ['error',{minProperties: 4,multiline: true,consistent: true,},],'vue/object-curly-spacing': ['error', 'always'],'max-len': 'off','no-multi-spaces': 'error','no-return-assign': 'off',semi: ['error', 'always'],eqeqeq: 'error','jsx-quotes': ['off', 'prefer-single'],'jsx-a11y/click-events-have-key-events': 'off','jsx-a11y/no-noninteractive-element-interactions': 'off','import/prefer-default-export': 'off','import/extensions': 'off','import/no-unresolved': 'off','no-multiple-empty-lines': ['error',{max: 2,maxEOF: 1,},],'no-param-reassign': 'off','vue/eqeqeq': ['error', 'always'],'vue/html-end-tags': 'error','vue/no-spaces-around-equal-signs-in-attribute': 'error','vue/multi-word-component-names': 'off','vue/no-template-shadow': 'error','vue/require-prop-types': 'error','vue/require-explicit-emits': 'error','vue/mustache-interpolation-spacing': ['error', 'always'],'vue/no-multi-spaces': ['error',{ignoreProperties: false,},],'vue/html-closing-bracket-newline': ['error',{singleline: 'never',multiline: 'always',},],'vue/html-self-closing': 'off','vue/block-lang': 'off','vue/html-indent': ['error',2,{attribute: 1,baseIndent: 1,closeBracket: 0,alignAttributesVertically: true,ignores: ['VExpressionContainer'],},],'vue/html-closing-bracket-spacing': ['error',{startTag: 'never',endTag: 'never',selfClosingTag: 'always',},],'vue/max-attributes-per-line': ['error',{singleline: 3,multiline: 1,},],'vue/attribute-hyphenation': 'off','@typescript-eslint/no-shadow': 'off','@typescript-eslint/no-explicit-any': 'off','@typescript-eslint/no-unused-vars': 'error','@typescript-eslint/ban-ts-comment': 'off','@typescript-eslint/indent': 'off',},},
];
2.3、配置typescript
- 修改配置tsconfig.json文件
{"extends": "@vue/tsconfig/tsconfig.dom.json","exclude": ["src/**/__tests__/*", "node_modules/**"],"compilerOptions": {"target": "ES2020","useDefineForClassFields": true,"module": "ESNext","lib": ["ES2020", "DOM", "DOM.Iterable"],"skipLibCheck": true,/* Bundler mode */"moduleResolution": "node","allowImportingTsExtensions": true,"resolveJsonModule": true,"isolatedModules": true,"noEmit": true,"jsx": "preserve","allowJs": true,/* Linting */"strict": true,"noUnusedLocals": true,"noUnusedParameters": true,"noFallthroughCasesInSwitch": true,/* Paths */"baseUrl": ".","paths": {"@/*": ["./src/*"]}},"files": [],"references": [{"path": "./tsconfig.node.json"},{"path": "./tsconfig.app.json"}]
}
3、配置代码检查器
vite-plugin-checker 是一个 Vite 插件,它能够在工作线程中运行 TypeScript、ESLint、vue-tsc、Stylelint 等多种静态代码检查工具
,以提高开发效率并确保代码质量。
- 安装
pnpm add vite-plugin-checker -D
- 修改vite.config.ts配置
import { fileURLToPath, URL } from 'node:url';import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';
import checker from 'vite-plugin-checker';
import vueDevTools from 'vite-plugin-vue-devtools';// https://vite.dev/config/
export default defineConfig({base: './', // 配置服务器的检索方式plugins: [vue(),vueJsx(),vueDevTools(),checker({eslint: {useFlatConfig: true,lintCommand: 'eslint "./src/**/*.{ts,tsx,vue}"',},overlay: {initialIsOpen: false,},typescript: true,vueTsc: true,}),],resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url)),},},// 配置外部 ip 访问与端口server: {host: '0.0.0.0',port: 9999,},
});
4、修改路由配置信息
如果公司对应服务没有做相关的路由映射,需要将src/router/index.ts中的createWebHistory替换成createWebHashHistory,如果有请忽略这一步骤~
如下所示
二、重置浏览器默认样式
normalize.css 是一个用于重置浏览器默认样式的库,使得不同浏览器之间的渲染更加一致
- 安装
pnpm add normalize.css
- src/mian.ts引入
import './assets/main.css';import { createApp } from 'vue';
import { createPinia } from 'pinia';import App from './App.vue';
import router from './router';
import 'normalize.css';const app = createApp(App);app.use(createPinia());
app.use(router);app.mount('#app');
三、安装样式预处理器
大家可以自行安装自己熟悉的预处理器(less、sass、stylus……),此处我选择自己常用的sass
pnpm add sass -D
tip:vite内置了常用的预处理器支持无需,安装配置sass-loader 即可使用
四、ui组件库安装
市面上的ui组件库有很多,此处我只提供我最常用的两种组件库进行配置
如果是搭建后台管理系统,此处可看element-plus配置。
如果是搭建移动端h5,此处建议可看vant组件库
1、element-plus组件库配置
官方文档配置:https://element-plus.org/zh-CN/guide/quickstart.html
- 安装
pnpm add element-plus
pnpm add -D unplugin-vue-components unplugin-auto-import
- 修改vite.config.ts配置
import { fileURLToPath, URL } from 'node:url';import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';
import checker from 'vite-plugin-checker';
import vueDevTools from 'vite-plugin-vue-devtools';
import AutoImport from 'unplugin-auto-import/vite';
import Components from 'unplugin-vue-components/vite';
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';// https://vite.dev/config/
export default defineConfig({base: './', // 设置打包路径plugins: [vue(),vueJsx(),vueDevTools(),AutoImport({resolvers: [ElementPlusResolver()],}),Components({resolvers: [ElementPlusResolver()],}),checker({eslint: {useFlatConfig: true,lintCommand: 'eslint "./src/**/*.{ts,tsx,vue}"',},overlay: {initialIsOpen: false,},typescript: true,vueTsc: true,}),],resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url)),},},server: {host: '0.0.0.0',port: 9999,},
});
2、vant组件库配置
官方文档配置: https://vant-ui.github.io/vant/#/zh-CN/quickstart
- 安装
pnpm add vant
pnpm add /auto-import-resolver unplugin-vue-components unplugin-auto-import -D
- 修改vite.config.ts配置
import { fileURLToPath, URL } from 'node:url';import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';
import checker from 'vite-plugin-checker';
import vueDevTools from 'vite-plugin-vue-devtools';
import AutoImport from 'unplugin-auto-import/vite';
import Components from 'unplugin-vue-components/vite';
import { VantResolver } from '@vant/auto-import-resolver';// https://vite.dev/config/
export default defineConfig({base: './', // 设置打包路径plugins: [vue(),vueJsx(),vueDevTools(),AutoImport({resolvers: [VantResolver()],}),Components({resolvers: [VantResolver()],}),checker({eslint: {useFlatConfig: true,lintCommand: 'eslint "./src/**/*.{ts,tsx,vue}"',},overlay: {initialIsOpen: false,},typescript: true,vueTsc: true,}),],resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url)),},},server: {host: '0.0.0.0',port: 9999,},
});
五、二次封装axios
- 安装
pnpm add axios
新增src/service/index.ts文件
import Axios from 'axios';
import type { AxiosInstance, InternalAxiosRequestConfig, AxiosResponse } from 'axios';const axios: AxiosInstance = Axios.create({baseURL: 'XXX',timeout: 20000,withCredentials: true,
});axios.interceptors.request.use((config: InternalAxiosRequestConfig) => {return config;},(error) => {// pendingRequest.clear();console.log(error);return Promise.reject(error);},
);// 请求结束关闭loading
axios.interceptors.response.use((response: AxiosResponse) => {// console.log(response);return response.data || {};},(err) => {console.log('err', err);return Promise.reject(err);},
);export function get<T>(url: string, params?: any): Promise<T> {return axios.get(url, { params });
}export function post<T>(url: string, data?: any): Promise<T> {return axios.post(url, data);
}export default axios;
六、配置环境变量
1、创建配置文件
根目录创建三个配置文件,更多环境一样如此操作。
注: 定义的变量必须以VITE_开头
- .env.development (开发环境)
VITE_APP_ENV = 'development';
VITE_APP_API_URL = /api / xxx务后地服本端 / xxx测试 / xxx生产都行;
- .env.test (测试环境)
VITE_APP_ENV = 'test';
VITE_APP_API_URL = xxx测试域名;
- .env.production (生产环境)
VITE_APP_ENV = 'production';
VITE_APP_API_URL = xxx生产域名;
2、使用变量
- 在代码中使用
const baseUrl = import.meta.env.VITE_BASE_URL;
- 在vite.config.ts中使用环境变量
// 使用loadEnv方法加载环境变量
import { defineConfig, loadEnv } from 'vite';
//...export default ({ mode }) => {console.log('加载的环境变量', loadEnv(mode, process.cwd()).VITE_BASE_URL);return defineConfig({//...});
};
3、修改package.json启动命令
"scripts": {"dev": "vite --mode development","build": "vite build --mode production",},
七、拓展实用插件(按需安装配置)
此处推荐一些我常用的工具库,大家可以参考按需安装。相关使用方法网上一搜一大堆,这边就不多余再演示了
1、dayjs 时间处理
Day.js是一个极简的JavaScript库,
可以为现代浏览器解析、验证、操作和显示日期和时间,文件大小只有2KB左右。Day.js对国际化有很大的支持。
pnpm add dayjs
2、qs
qs是一个流行的查询参数序列化和解析库。
pnpm add qs
// 如果项目配置了typescript需安装
pnpm add @types/qs -D
3、lodash实用工具库
Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库
。它提供了一套从数组、数字、对象、字符串、日期等常见数据类型中提取值的函数,以及很多其他实用功能。Lodash 旨在通过提高抽象程度来减少代码量,提高代码的可维护性。
pnpm add lodash
// 如果项目配置了typescript需安装
pnpm add @types/lodash -D
4、big.js(涉及计算相关)
big.js 是一个用于任意精度十进制算术的小型快速 JavaScript 库。
它允许你创建、操作和比较大数字,这些数字的精度超过了 JavaScript 原生 Number 类型所能提供的范围。主要可以用于处理需要高精度计算的场景,例如金额计算、科学计算、密码学等等。
pnpm add big.js
// 如果项目配置了typescript需安装
pnpm add @types/big.js -D
5、js-cookie
是一个简单、轻量级的 JavaScript API 库,用于处理浏览器 cookies。它允许你创建、读取、删除和操作 cookie,而不需要担心浏览器的兼容性问题。
pnpm add js-cookie
// 如果项目配置了typescript需安装
pnpm add @types/js-cookie -D
6、postcss-plugin-px2rem
postcss-plugin-px2rem
是一个 PostCSS 插件,它可以自动 将 CSS 文件中的像素单位(px)转换为相对单位(rem)
,以实现响应式布局和移动端适配。这个插件特别适用于需要根据不同分辨率的移动设备进行适配的场景。
- 安装
pnpm add -D postcss-plugin-px2rem autoprefixer
- 配置vite.config.js
import autoprefixer from 'autoprefixer'
import postcssPluginPx2rem from 'postcss-plugin-px2rem';
import { defineConfig } from 'vite';// https://vitejs.dev/config/
export default defineConfig({plugins: [...],resolve: {...},css: {postcss: {plugins: [autoprefixer,postcssPluginPx2rem({remUnit: 108,rootValue: 108, // 换算基数,1rem 相当于多少 pxunitPrecision: 5, // 允许 REM 单位增长到的十进制数字propWhiteList: [], // 白名单,指定哪些属性不转换为 rempropBlackList: [], // 黑名单,指定哪些属性需要转换为 remexclude: /(node_module)/, // 排除的文件夹或文件selectorBlackList: [], // 要忽略并保留为 px 的选择器mediaQuery: false, // 允许在媒体查询中转换 pxminPixelValue: 3 // 设置要替换的最小像素值}),],},},
});
7、@vitejs/plugin-legacy(兼容旧浏览器,移动端项目重点推荐!!!)
公司合作的一些客户自带的客户端浏览器版本超级无敌老旧(此处内涵某些银行😒),项目发布后由于浏览器过于老旧无法处理新版本的语法产生白屏问题,使用这个插件可以生成兼容旧版浏览器的构建文件解决这个问题(救我狗命!!!)。
@vitejs/plugin-legacy 是一个 Vite 插件,用于为 Vite 项目提供对旧版浏览器的支持。
这个插件可以根据你在项目配置中指定的目标浏览器列表(通过 browserslist 字段),自动生成兼容旧版浏览器的构建文件。这些构建文件将包含经过转换和降级处理的代码,以 确保在不支持最新 JavaScript 特性的浏览器中正常运行。
使用 @vitejs/plugin-legacy 插件后,当用户访问你的网站时,Vite 将根据用户的浏览器版本动态加载适合其浏览器的构建文件。
- 安装
pnpm add -D @vitejs/plugin-legacy
- 配置vite.config.js
import legacy from '@vitejs/plugin-legacy';
import { defineConfig } from 'vite';// https://vitejs.dev/config/
export default defineConfig({plugins: [vue(),legacy({targets: ['ie >= 11', 'chrome <= 60'], // 需要兼容的目标列表,可以设置多个additionalLegacyPolyfills: ['regenerator-runtime/runtime'],renderLegacyChunks: true,polyfills: ['es.symbol','es.array.filter','es.promise','es.promise.finally','es/map','es/set','es.array.for-each','es.object.define-properties','es.object.define-property','es.object.get-own-property-descriptor','es.object.get-own-property-descriptors','es.object.keys','es.object.to-string','web.dom-collections.for-each','esnext.global-this','esnext.string.match-all',],}),],resolve: {...},
});
- 配置package.json
在 package.json 文件中的 “browserslist” 字段中指定需要支持的目标浏览器。例如,如果你想要支持最近两个版本的 Chrome 和 Firefox 浏览器,可以将该字段修改为:
"browserslist": ["last 2 Chrome versions","last 2 Firefox versions"
]
8、
相关文章:
vite6+vue3+ts+prettier+eslint9配置前端项目(后台管理系统、移动端H5项目通用配置)
很多小伙伴苦于无法搭建一个规范的前端项目,导致后续开发不规范,今天给大家带来一个基于Vite6TypeScriptVue3ESlint9Prettier的搭建教程。 目录 一、基础配置1、初始化项目2、代码质量风格的统一2.1、配置prettier2.2、配置eslint2.3、配置typescript 3、…...
滴滴数据分析80道面试题及参考答案
如何衡量分类好坏? 衡量分类好坏有多种方法,常用的有准确率、精确率、召回率、F1 值、ROC 曲线与 AUC 值等。 准确率:是指分类正确的样本数占总样本数的比例,计算公式为:准确率 = (分类正确的样本数)/(总样本数)。准确率越高,说明分类器整体的分类效果越好,但在正负…...
嵌入式应用软件开发中C语言方向面试题
嵌入式应用软件开发中C语言方向面试题随笔 前言一、C语言基础二、嵌入式开发相关三、硬件相关知识五、实际编程问题前言 做嵌入式开发这么多年了,简单记录下C语言方向常见面试题,这里是应用软件方向的。 一、C语言基础 C语言的指针与数组的区别是什么?指针:指针是一个变量…...
vue3中mixins替代方案
使用自定义 Hooks(Composables) 自定义 Hooks 是一种基于函数的代码复用方式,可以在 setup 函数中使用。它允许将组件的逻辑分割成更小的、可复用的部分。 useCounter.js //useCounter.js import { ref, onMounted } from vue;export func…...
线性代数自学资源推荐我的个人学习心得
1.前言 自己这个学期的课程基本上就结束了,因此我自己就开始学习下个学期的课程--线性代数,也是我们在大学里面的最后一门数学课程了; 之前有过一些这个线性代数的基础,当时主要是参加这个数学建模比赛去学习这个matlab吗&#…...
WordPress Crypto 插件 身份认证绕过漏洞复现(CVE-2024-9989)
0x01 产品简介 WordPress Crypto插件是指那些能够为WordPress网站提供加密货币支付、信息显示或交易功能的插件。这些插件通常与WordPress电子商务插件(如WooCommerce)集成,使网站能够接受多种加密货币支付,或展示加密货币实时信息。支持多种加密货币支付,付款直接进入钱…...
软件逆向之OD基础
OD程序目录 plugin:存放OD所有插件 UDD:存放程序临时的数据,比如:程序注释、断点等 ollydbg.ini:存放OD自身配置的属性表 OLLYDBG.HLP:OD的帮助手册 OD断点 1.软件断点: 介绍:…...
C++并发编程之内存顺序一致性
std::memory_order_seq_cst 是 C11 引入的内存模型中的一种内存顺序(memory order),全称为 Sequential Consistency(顺序一致性)。它是 C 中最严格的内存顺序,提供了最强的同步保证。下面详细解释其含义、意…...
软件测试面试题整理
一、人格相关问题 1、自我介绍结构 姓名工作年限简单介绍上家公司的行业主要负责内容个人优势短期内的职业规划应聘该岗位的原因 2、对未来的发展方向怎么看 3、你对测试最大的兴趣在哪里?为什么? 二、技术相关问题 1、测试理论以及应用 1、给你一个…...
Java中如何实现线程安全的单例模式?
目录 1、懒汉式(线程安全) 2、饿汉式(线程安全) 3、双重校验锁(线程安全) 4、静态内部类(推荐) 5、枚举(最佳方法) 6、总结 在Java中,实现线…...
MYsql--------ubantu中安装mysql
在Ubuntu平台上下载、启动和关闭MySQL的方法如下: 下载安装MySQL 更新软件包列表:打开终端,输入以下命令,确保软件包列表是最新的。sudo apt update安装MySQL服务器:执行以下命令安装MySQL服务器。在安装过程中&…...
【Ubuntu】不能连上网络
1. ping路由器的IP地址 ping 192.168.1.1 如果ping不通的话,可能是网络故障导致的。需要重启配置ip地址。配置文件 sudo vi /etc/network/interface 2. ping 8.8.8.8 如果ping不通的话,可能是路由器不能链接往外网; 或者路由器显示了当…...
探索 AIGC 的基础知识:人工智能生成内容的全景视图
在数字化时代,人工智能生成内容(AIGC)正以前所未有的速度改变着我们的创作方式。本文将深入探讨 AIGC 的定义、构成要素、应用场景以及其带来的优势,帮助读者全面理解这一前沿技术。 1. AIGC 的定义与范围 人工智能生成内容&…...
使用java语言,自定义redistemplate
自定义 RedisTemplate 为了方便使用,你可以创建一个自定义的 RedisTemplate,并将其注入到服务中。 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.…...
React-Router 一站式攻略:从入门到精通,掌握路由搭建与权限管控
文章目录 一、前言二、安装使用 npm 安装(推荐)使用 yarn 安装 三、基础使用设置路由基础结构定义路由和组件关联直接在组件中定义路由定义单独一个路由表 创建导航链接 四、核心组件和功能BrowserRouter 和 HashRouterRoute 组件Link 组件Switch 组件 五…...
运动控制探针功能详细介绍(CODESYS+SV63N伺服)
汇川AM400PLC和禾川X3E伺服EtherCAT通信 汇川AM400PLC和禾川X3E伺服EtherCAT通信_汇川ethercat通信-CSDN博客文章浏览阅读1.2k次。本文详细介绍了如何使用汇川AM400PLC通过EtherCAT总线与禾川X3E伺服进行通信。包括XML硬件描述文件的下载与安装,EtherCAT总线的启用,从站添加…...
七种改进爬山算法的方法
一、爬山算法 爬山算法(Hill Climbing Algorithm)是一种启发式的基于局部最优解的搜索算法,用于在给定的搜索空间中寻找全局最优解或足够好的解。它属于局部搜索算法,通常用于解决优化问题,包括连续和离散问题。 爬山算法模拟了爬山的过程,从某个随机起始点开始,不断向更…...
【Cocos TypeScript 零基础 4.1】
目录 背景滚动 背景滚动 创建一个 空节点 背景丟进去 ( 复制一个,再丢一次都行) 新建TS脚本 并绑定到 空节点 上 再对TS脚本进行编辑 export class TS2bg extends Component {property (Node) // 通过属性面板去赋值bg1:Node nullproperty (Node) bg2:Node nullprope…...
gitlab高级功能之 CICD Steps
CICD Steps 1. 介绍2. 定义 Steps2.1 Inputs2.2 Outputs 3. Using steps3.1 Set environment variables3.2 Running steps locally 4. Scripts5. Actions5.1 已知的问题 6. 表达式7. 实操7.1 单个step7.2 多个step7.3 复用steps7.4 添加output到step7.5 使用远程step 1. 介绍 …...
全国城市经纬度--包括省会(直辖市)、地级市
全国城市未必齐全,谨慎使用。 一、全国城市csv数据 北京市 北京市 北京市 116.4 39.9 天津市 天津市 天津市 117.2 39.12 河北省 石家庄市 石家庄市 114.52 38.05 河北省 唐山市 唐山市 118.2 39.63 河北省 秦皇岛市 秦皇岛市 119.6 39.93 河北省 邯郸市 邯郸市 1…...
深入解析爬虫中的算法设计:提升效率与准确度
在网络爬虫(Web Scraping)中,设计高效、准确的算法是关键,尤其当面对大量数据或复杂的网站结构时,精心设计的爬虫算法能显著提高爬取速度并提升数据提取的准确性。本篇博客将详细讲解爬虫算法的设计与优化策略…...
java中统一异常处理,如何实现全局异常处理,@RestControllerAdvice 注解实现统一异常处理
文章目录 一、粗谈统一异常处理二、细谈统一异常处理:结合统一结果返回类为什么使用统一异常处理?怎么做?如何处理?代码实现? 一、粗谈统一异常处理 先看个案例: 1、写了一个接口: 实体类如下…...
vscode中调用deepseek实现AI辅助编程
来自 Python大数据分析 费弗里 1 简介 大家好我是费老师,最近国产大模型Deepseek v3新版本凭借其优秀的模型推理能力,讨论度非常之高🔥,且其官网提供的相关大模型API接口服务价格一直走的“价格屠夫”路线,性价比很高…...
设计模式七大原则
在软件开发的广袤领域中,设计模式如同熠熠生辉的灯塔,为开发者指引着通往高效、可维护、可扩展软件系统的方向。而设计模式背后的七大原则,更是这些灯塔的核心支撑,它们是软件开发过程中必须遵循的黄金法则,为我们构建…...
重庆市大数据局:基于可信数据空间的公共数据流通利用
在2024年可信数据空间论坛上,重庆市大数据局相关领导发表了题为:基于可信数据空间的公共数据流通利用的演讲,系统介绍了重庆公共数据流通方面的实践经验和案例。 篇幅限制,部分内容如下:...
高阶数据结构----布隆过滤器和位图
(一)位图 位图是用来存放某种状态的,因为一个bit上只能存0和1所以一般只有两种状态的情况下适合用位图,所以非常适合判断数据在或者不在,而且位图十分节省空间,很适合于海量数据,且容易存储&…...
SpringCloud源码分析-nacos与eureka
一、高版本为什么优先用nacos 如果用alibaba springcloud,那么就是阿里的技术体系。nacos属于阿里的原生技术栈,所以阿里更偏向于用nacos作为服务发现注册。 二、对比分析 Spring Cloud Alibaba 推荐使用 Nacos 作为服务发现和配置管理的首选组件&…...
多台DHCP服务器时的问题讨论
有两台DHCP服务器为主机提供DHCP服务会发生什么 在一个网络中,如果有两台设备同时连接到主机,并且它们都可以提供 DHCP 服务,这可能会引发以下问题: 1. IP 地址冲突 当两台设备都扮演 DHCP 服务器时,它们会分别为主…...
Golang的缓存一致性策略
Golang的缓存一致性策略 一致性哈希算法 在Golang中,缓存一致性策略通常使用一致性哈希算法来实现。一致性哈希算法能够有效地解决缓存节点的动态扩容、缩容时数据重新分布的问题,同时能够保证数据访问的均衡性。 一致性哈希算法的核心思想是将节点的哈希…...
Java-创建一个结合CompletableFuture和自定义功能的工具类
1.重试机制:当异步任务失败时自动重试。 2.超时重试:在指定时间内未完成的任务进行重试。 3.批量处理:将多个任务批量执行并收集结果。 4.日志记录:为每个异步任务添加日志记录,便于调试和监控。 5.自定义线程池:允许用户传入自定义的线程池配置。 import java.util…...
微机——计算机中的数制
目录 数制转换: 十进制数转为非十进制数: 二、八、十六进制数之间的转换: 数及字符的表示: 二进制数的加减运算: 无符号数的运算: 带符号数运算中的溢出问题: 计算机中常用的编码&#…...
DevSecOps自动化在安全关键型软件开发中的实践、Helix QAC Klocwork等SAST工具应用
DevSecOps自动化对于安全关键型软件开发至关重要。 那么,什么是DevSecOps自动化?具有哪些优势?为何助力安全关键型软件开发?让我们一起来深入了解~ 什么是DevSecOps自动化? DevSecOps自动化是指在软件开发生命周期的各…...
Linux下部署ElasticSearch集群
Elasticsearch7.17.8集群的搭建 节点host名称节点ip节点部署内容k8s-m192.168.40.142主节点 数据节点k8s-w1192.168.40.141主节点 数据节点k8s-w2192.168.40.140数据节点 一、准备安装环境 1.下载安装包 官网 www.elastic.co 下载所有版本地址 点击跳转 下载elasticsearch-7.…...
杰盛微 JSM4056 1000mA单节锂电池充电器芯片 ESOP8封装
JSM4056 1000mA单节锂电池充电器芯片 JSM4056是一款单节锂离子电池恒流/恒压线性充电器,简单的外部应用电路非常适合便携式设备应用,适合USB电源和适配器电源工作,内部采用防倒充电路,不需要外部隔离二极管。热反馈可对充电电流进…...
kubernetes学习-kubectl命令、探针(二)
一、在任意节点使用 kubectl # 在master节点获取节点信息 [rootk8s-master k8s]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane,master 16h v1.23.6 k8s-node1 Ready <none> …...
多组学破解雪域雄鸡的高原缺氧适应机制
藏鸡是一种原产于中国青藏高原的鸡种,主要分布在海拔2200-4100米的河谷区和高山峡谷区。它们适应高海拔和寒冷的气候条件,能够在恶劣的环境中生存和繁殖。本研究主要关注高原藏鸡适应高原缺氧环境的机制,通过宏转录组测序和代谢组结果的联…...
Kubernetes Gateway API-3-TLS配置
1 简介 Gateway API 允许使用多种方式配置 TLS。本文档列出了各种TLS设置,并给出了如何有效使用它们的一般指南。 尽管本文档涵盖了 Gateway API 最常见的TLS配置形式,但某些实现也可能提供特定于实现的扩展,允许不同或更高级形式的TLS配置。除此文档外,值得阅读你所使用…...
C++ 中如何优雅地返回一个递归闭包函数?
在刷Leetcode时,我遇到了一道题目(详见Leetcode 第426场周赛分析总结Q3),需要对两棵树建图,然后以每个节点作为根节点进行DFS遍历。一般的实现方法是将重复的逻辑封装起来,写两个函数,一个负责建…...
dockerignore文件怎么写
.dockerignore 文件是一个文本文件,告诉 Docker 在构建镜像时应该忽略哪些文件或目录。这个文件的作用类似于 .gitignore,用于排除不需要包含在 Docker 镜像中的文件或目录,以减少镜像的大小和提高构建速度。 .dockerignore 文件的格式 每行…...
利用 AI 高效生成思维导图的简单实用方法
#工作记录 适用于不支持直接生成思维导图的AI工具;适用于AI生成后不能再次编辑的思维导图。 在日常的学习、工作以及知识整理过程中,思维导图是一种非常实用的工具,能够帮助我们清晰地梳理思路、归纳要点。而借助 AI 的强大能力,…...
SpringMVC(一)配置
目录 引入 第一章:Java web的发展历史 一、Model I和Model II 1.Model I开发模式 2.Model II开发模式 二. MVC模式 第二章:SpringMVC的入门案例 搭建SpringMVC的入门程序 1.创建新项目 2.等待加载导入坐标 3.处理xml文件和其他 导入tomcat 运…...
Vue3苦逼的学习之路
从一名测试转战到全栈是否可以自学做到,很多朋友肯定会说不可能,或就算转了也是个一般水平,我很认同,毕竟没有经过各种项目的摧残,但是还是得踏足一下这个领域。所以今天和大家分享vue3中的相关内容,大佬勿…...
github提交不上去,网络超时问题解决
问题出现的原因: DNS服务器数据不同步,github的服务器发送迁移,在本地缓存的ip地址现在无效了。 解决方案: 1)点击这里,查询github.com最新的ip地址 2.0)编辑linux系统地址缓存文件&#x…...
SAP物料主数据界面增加客制化字段、客制化页签的方式
文章目录 前言一、不增加页签,只增加客制化字段二、增加物料主数据页签 前言 【SAP系统MM模块研究】 #SAP #MM #物料 #客制化 #物料主数据 项目上难免会遇到客户要在物料主数据的界面上,增加新字段的需求。 实现方式有: (1&…...
56.在 Vue 3 中使用 OpenLayers 通过 moveend 事件获取地图左上和右下的坐标信息
前言 在现代 Web 开发中,地图应用越来越成为重要的组成部分。OpenLayers 是一个功能强大的 JavaScript 地图库,它提供了丰富的地图交互和操作功能,而 Vue 3 是当前流行的前端框架之一。在本篇文章中,我们将介绍如何在 Vue 3 中集…...
DDoS攻击防御方案大全
1. 引言 随着互联网的迅猛发展,DDoS(分布式拒绝服务)攻击成为了网络安全领域中最常见且危害严重的攻击方式之一。DDoS攻击通过向目标网络或服务发送大量流量,导致服务器过载,最终使其无法响应合法用户的请求。本文将深…...
OLED的显示
一、I2C I2C时序:时钟线SCL高电平下:SDA由高变低代表启动信号,开始发送数据;SCL高电平时,数据稳定,数据可以被读走,开始进行读操作,SCL低电平时,数据发生改变࿱…...
BP神经网络的反向传播算法
BP神经网络(Backpropagation Neural Network)是一种常用的多层前馈神经网络,通过反向传播算法进行训练。反向传播算法的核心思想是通过计算损失函数对每个权重的偏导数,从而调整权重,使得网络的预测输出与真实输出之间…...
CS·GO搬砖流程详细版
说简单点,就是Steam买了然后BUFF上卖,或许大家都知道这点,但就是一些操作和细节问题没那么明白。我相信,你看完这篇文章以后,至少会有新的认知。 好吧,废话少说,直接上实操! 首先准…...
ElasticSearch系列(一)
一.了解ES、倒排索引、es的一些概念、安装es、kibana 二.DSL;索引库操作 三.Java RestClient:索引库操作 一、了解ES、倒排索引、es的一些概念、安装es、kibana kibana、logstash、beats Elasticserach 存储,计算 ,搜索数据 –…...