Vue3、Vite5、Primevue、Oxlint、Husky9 简单快速搭建最新的Web项目模板
Vue3、Vite5、Oxlint、Husky9 简单搭建最新的Web项目模板
- 特色
- 进入正题
- 创建基础模板
- 配置API自动化导入
- 配置组件自动化导入
- 配置UnoCss
- 接入Primevue
- 接入VueRouter4
- 配置项目全局环境变量
- 封装Axios
- 接入Pinia状态管理
- 接入Prerttier + OXLint + ESLint
- 接入 husky + lint-staged(可选)
- 接入commitizen + commitlint + cz-git(可选)
- 测试
- 模板
- 样例
- 敬请期待
无人扶我青云志,我自踏雪至山巅
作者GitHub:https://github.com/gitboyzcf 有兴趣可关注!!!
特色
-
⚡️ Vue 3、 Vite 5、pnpm
-
📦 组件自动化引入
-
🍍 使用 Pinia 的状态管理
-
🌈 Primevue - Vue.js UI 套件,提高开发效率
-
🎨 UnoCSS - 高性能且极具灵活性的即时原子化 CSS 引擎
-
😃 各种图标集为你所用
-
🔥 使用 新的
<script setup>
语法 -
📥 API 自动加载 - 直接使用 Composition API 无需引入
-
🌍 API 采用模块化自动导入方式 根据demo.js文件设置接口,以API_xxx_method的方式命名,在请求时无需导入 直接使用useRequest()函数返回参数以解构的方式获取,拿到即为写入的接口
-
💥 Oxlint(英)+ ESLint(英) - 双管齐下,享受高速度、强检查的代码格式化效果
-
🐶 husky + lint-staged - Git提交自动检测格式化代码,解放双手
-
🎢 无TS,释放你的野性
进入正题
node版本必须是 >=18.18.0
创建基础模板
pnpm create vite my-vue-app --template vue
详细请看➡️https://cn.vitejs.dev/guide/#scaffolding-your-first-vite-project
得到以下目录结构⬇️
配置API自动化导入
安装依赖
pnpm i unplugin-auto-import -D
在vite.config.js中配置
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'// https://vite.dev/config/
export default defineConfig({plugins: [vue(),AutoImport({imports: ['vue','vue-router','pinia','@vueuse/core',// 自动导入 自定义函数// {// '@/api': ['useRequest']// },],eslintrc: {enabled: true, // Default `false` 启动项目后 会在根目录下生成 eslintrc-auto-import.json文件 生成后可改为false 避免每次生成 慢 filepath: './.eslintrc-auto-import.json', // Default `./.eslintrc-auto-import.json`globalsPropValue: true // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable')}}),],
})
此时在App.vue
中不用引入直接可以使用Vue的api
<script setup>const title = ref('Hello World!')
</script>
配置组件自动化导入
安装依赖
pnpm i unplugin-vue-components -D
在vite.config.js中配置
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import Components from 'unplugin-vue-components/vite'// https://vite.dev/config/
export default defineConfig({plugins: [vue(),Components({dirs: ['src/components'],dts: false,resolvers: [],include: [/\.vue$/, /\.vue\?vue/, /\.jsx$/]}),],
})
src/components
下新建 的组件 ,此时在App.vue
中不用引入直接可以使用
<template><div><HelloWorld msg="Hello Vue 3.0 + Vite" /></div>
</template><script setup></script>
配置UnoCss
安装依赖
pnpm i unocss -D
直接插入以下代码⬇️(没有对应文件的自行创建)
unocss.config.js
import {defineConfig,presetAttributify,presetIcons,presetTypography,presetUno,presetWebFonts,transformerDirectives,transformerVariantGroup
} from 'unocss'// https://unocss.dev/guide/config-file
export default defineConfig({shortcuts: [// ...],theme: {colors: {// ...}},presets: [presetUno(),presetAttributify(),presetIcons(),presetTypography(),presetWebFonts({fonts: {// ...}})],transformers: [transformerDirectives(), transformerVariantGroup()]
})
在main.js中引入样式
import { createApp } from 'vue'
import App from './App.vue'import './style.css'
import 'virtual:uno.css'async function bootstrap() {const app = createApp(App)app.mount('#app')
}
bootstrap()
在vite.config.js中配置
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import Unocss from 'unocss/vite'// https://vite.dev/config/
export default defineConfig({plugins: [vue(),// ...Unocss({}),// ...],
})
接入Primevue
安装依赖
pnpm add primevue @primevue/themes
在main.js中配置
import { createApp } from 'vue'
import App from './App.vue'
import PrimeVue from 'primevue/config' // +
import Nora from '@primevue/themes/nora' // +import './style.css'
import 'virtual:uno.css'async function bootstrap() {const app = createApp(App)// +app.use(PrimeVue, { theme: {preset: Nora}})app.mount('#app')
}
bootstrap()
在vite.config.js中配置组件自动导入
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import Components from 'unplugin-vue-components/vite'
import { PrimeVueResolver } from '@primevue/auto-import-resolver' // +// https://vite.dev/config/
export default defineConfig({plugins: [vue(),Components({dirs: ['src/components'],dts: false,resolvers: [PrimeVueResolver()], // +include: [/\.vue$/, /\.vue\?vue/, /\.jsx$/]}),],
})
此时在App.vue
中不用引入直接可以使用
<!-- https://primevue.org/button/#severity -->
<div class="card flex justify-center flex-wrap gap-4"><Button label="Primary" /><Button label="Secondary" severity="secondary" /><Button label="Success" severity="success" /><Button label="Info" severity="info" /><Button label="Warn" severity="warn" /><Button label="Help" severity="help" /><Button label="Danger" severity="danger" /><Button label="Contrast" severity="contrast" />
</div>
更多组件请看➡️ https://primevue.org/button/
接入VueRouter4
https://router.vuejs.org/zh/
安装依赖
pnpm i vue-router@4
创建以下文件夹以及文件
直接插入以下代码⬇️
helper.js
/*** 设置页面标题* @param {Object} to 路由对象*/
export const usePageTitle = (to) => {const projectTitle = import.meta.env.VITE_APP_TITLEconst rawTitle = normalizeTitle(to.meta.title)const title = useTitle()title.value = rawTitle ? `${projectTitle} | ${rawTitle}` : projectTitlefunction normalizeTitle(raw) {return typeof raw === 'function' ? raw() : raw}
}
index.js
import { createRouter, createWebHashHistory } from 'vue-router'
import { usePageTitle } from './helper'// const whiteList = ['/login'] // 白名单
const router = createRouter({history: createWebHashHistory(import.meta.env.BASE_URL),routes: [{path: '/',name: 'Test',// 注意: 此组件自行创建引入!!!!!!!!!component: () => import('@/views/demo/index.vue'),meta: {title: '测试'}},{path: '/:pathMatch(.*)*',// 注意: 此组件自行创建引入!!!!!!!!!component: () => import('@/views/system/404/404.vue'),meta: {title: '找不到页面'}}]
})router.beforeEach((to, from, next) => {usePageTitle(to)next()
})async function setupRouter(app) {app.use(router)
}export { setupRouter }
配置项目全局环境变量
具体请看 ➡️https://vite.dev/guide/env-and-mode.html#env-files
.env
# 生产环境# 页面名称
VITE_APP_TITLE = 演示项目# 项目localStorage存储前缀
VITE_APP_PREFIX = demo# 网络请求 -- 根据项目需求更改 下面⬇️配置axios需要用到
VITE_APP_API_BASEURL = /
.env.development
# 本地环境(开发环境)# 页面名称
VITE_APP_TITLE = 演示项目# 项目localStorage存储前缀
VITE_APP_PREFIX = demo# 网络请求 -- 根据项目需求更改 下面⬇️配置axios需要用到
VITE_APP_API_BASEURL = /
在main.js中引入
import { createApp } from 'vue'
import App from './App.vue'
import PrimeVue from 'primevue/config'
import Nora from '@primevue/themes/nora'
import { setupRouter } from './router' // +import './style.css'
import 'virtual:uno.css'async function bootstrap() {const app = createApp(App)app.use(PrimeVue, {theme: {preset: Nora}})await setupRouter(app) // +app.mount('#app')
}
bootstrap()
封装Axios
Vite4、Vue3、Axios 针对请求模块化封装搭配自动化导入(简单易用)
接入Pinia状态管理
安装依赖
pnpm i pinia
创建以下文件夹以及文件
直接插入以下代码⬇️
index.js
import { createPinia } from 'pinia'
export const piniaStore = createPinia()
export function setupStore(app) {app.use(piniaStore)
}
demo.js
import { piniaStore } from '@/stores'
export const useCounterStore = defineStore('counter', () => {const count = ref(0)const doubleCount = computed(() => count.value * 2)function increment() {count.value++}return { count, doubleCount, increment }
})export function useOutsideCounterStore() {return useCounterStore(piniaStore)
}
接入Prerttier + OXLint + ESLint
安装依赖
pnpm i oxlint prettier eslint-plugin-oxlint eslint-plugin-prettier -D
安装并配置ESLint
pnpm create @eslint/config@latest
根据响应提示选择,以下是我的选择⬇️
执行完后会自动创建eslint.config.js
配置文件,以及对应依赖包🤩
直接插入以下代码⬇️(没有对应文件的自行创建)
eslint.config.js
import path from 'path'
import globals from 'globals'
import pluginJs from '@eslint/js'
import pluginVue from 'eslint-plugin-vue'
import VueEslintParser from 'vue-eslint-parser'
import prettier from 'eslint-plugin-prettier'
import oxlint from 'eslint-plugin-oxlint'
import { FlatCompat } from '@eslint/eslintrc'
import { fileURLToPath } from 'url'const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)const compat = new FlatCompat({baseDirectory: __dirname
})/** @type {import('eslint').Linter.Config[]} */
export default [{files: ['**/*.{js,mjs,cjs,vue}']},{languageOptions: {globals: {...globals.browser,...globals.node},parser: VueEslintParser}},/** js推荐配置 */pluginJs.configs.recommended,/** vue推荐配置 */...pluginVue.configs['flat/essential'],/** 继承自动导入配置 */...compat.extends('./.eslintrc-auto-import.json'),/** oxlint推荐配置 */oxlint.configs['flat/recommended'],/** 自定义eslint配置 */{rules: {'no-var': 'error', // 要求使用 let 或 const 而不是 var'no-multiple-empty-lines': ['warn', { max: 1 }], // 不允许多个空行'no-unexpected-multiline': 'error', // 禁止空余的多行'no-useless-escape': 'off', // 禁止不必要的转义字符'vue/multi-word-component-names': 0}},/*** prettier 配置* 会合并根目录下的prettier.config.js 文件* @see https://prettier.io/docs/en/options* https://github.com/prettier/eslint-plugin-prettier/issues/634*/{plugins: {prettier},rules: {...prettier.configs.recommended.rules}},// 忽略文件{ignores: ['**/dist','./src/main.ts','.vscode','.idea','*.sh','**/node_modules','*.md','*.woff','*.woff','*.ttf','yarn.lock','package-lock.json','/public','/docs','**/output','.husky','.local','/bin','Dockerfile']}
]
prettier.config.js
export default {// 一行的字符数,如果超过会进行换行,默认为80,官方建议设100-120其中一个数printWidth: 100,// 一个tab代表几个空格数,默认就是2tabWidth: 2,// 启用tab取代空格符缩进,默认为falseuseTabs: false,// 行尾是否使用分号,默认为true(添加理由:更加容易复制添加数据,不用去管理尾行)semi: false,vueIndentScriptAndStyle: true,// 字符串是否使用单引号,默认为false,即使用双引号,建议设true,即单引号singleQuote: true,// 给对象里的属性名是否要加上引号,默认为as-needed,即根据需要决定,如果不加引号会报错则加,否则不加quoteProps: 'as-needed',// 是否使用尾逗号,有三个可选值"<none|es5|all>"trailingComma: 'none',// 在jsx里是否使用单引号,你看着办jsxSingleQuote: true,// 对象大括号直接是否有空格,默认为true,效果:{ foo: bar }bracketSpacing: true,proseWrap: 'never',htmlWhitespaceSensitivity: 'strict',endOfLine: 'auto'
}
.editorconfig
# 顶层editorconfig文件标识
root = true########## 针对所有文件适用的规则 ##########
[*]
# 编码格式
charset = utf-8
# 缩进符使用的风格 (tab | space)
indent_style = space
# 缩进大小
indent_size = 2
# 控制换行类型(lf | cr | crlf)
end_of_line = lf
# 文件最后添加空行
insert_final_newline = true
# 行开始是不是清除空格
trim_trailing_whitespace = true############# 针对md的规则 ###############
[*.md]
trim_trailing_whitespace = false
配置package.json文件
"scripts": {"dev": "vite --host","build": "vite build","preview": "vite preview","lint": "oxlint && eslint", "lint:fix": "oxlint --fix && eslint --fix"
},
此时终端中执行 pnpm lint
或者 pnpm lint:fix
就会检测并修复代码 🤩
检测结果以 oxlint形式展现⬇️
接入 husky + lint-staged(可选)
安装依赖
pnpm i husky lint-staged -D
执行 pnpm exec husky init
并且在 package.json的 scripts里面增加 "prepare": "husky init"
,(其他人安装后会自动执行) 根目录会生成 .hushy 文件夹。
直接插入以下代码⬇️(没有对应文件的自行创建)
lint-staged.config.js
export default {'**/*.{html,vue,ts,cjs,json,md}': ['prettier --write'],'**/*.{js,mjs,cjs,jsx,ts,mts,cts,tsx,vue,astro,svelte}': ['oxlint --fix && eslint --fix']
}
通过下面命令在钩子文件中添加内容⬇️
echo "npx --no-install -- lint-staged" > .husky/pre-commit
echo "npx --no-install commitlint --edit $1" > .husky/commit-msg
注意⚠️⚠️⚠️ :
上面命令钩子不会执行 当进行git提交时会出现下面问题⬇️
说是无法执行这个二进制文件 ,解决方案如下⬇️
在vscode编辑器底部操作栏 会显示当前文件编码格式 默认为➡️
点击后选择
然后再次执行git提交命令就可以了🤙
接入commitizen + commitlint + cz-git(可选)
安装依赖
pnpm i commitizen commitlint @commitlint/cli @commitlint/config-conventional cz-git -D
commitizen 基于Node.js的 git commit 命令行工具,辅助生成标准化规范化的 commit message
committlint 检查你的提交消息是否符合常规的提交格式。
cz-git 标准输出格式的 commitizen 适配器
直接插入以下代码⬇️(没有对应文件的自行创建)
commitlint.config.js
/** @type { import('cz-git').UserConfig } */
export default {extends: ['@commitlint/config-conventional'],rules: {'type-enum': [2,'always',['feat','fix','perf','style','docs','test','refactor','build','ci','init','chore','revert','wip','workflow','types','release']],'subject-case': [0]},prompt: {alias: { fd: 'docs: fix typos' },messages: {type: '选择你要提交的类型 :',scope: '选择一个提交范围(可选):',customScope: '请输入自定义的提交范围 :',subject: '填写简短精炼的变更描述 :\n',body: '填写更加详细的变更描述(可选)。使用 "|" 换行 :\n',breaking: '列举非兼容性重大的变更(可选)。使用 "|" 换行 :\n',footerPrefixesSelect: '选择关联issue前缀(可选):',customFooterPrefix: '输入自定义issue前缀 :',footer: '列举关联issue (可选) 例如: #31, #I3244 :\n',confirmCommit: '是否提交或修改commit ?'},types: [{ value: 'feat', name: 'feat: 🤩 新增功能 | A new feature', emoji: ':sparkles:' },{ value: 'fix', name: 'fix: 🐛 修复缺陷 | A bug fix', emoji: ':bug:' },{ value: 'docs', name: 'docs: 📝 文档更新 | Documentation only changes', emoji: ':memo:' },{value: 'style',name: 'style: 🎨 代码格式 | Changes that do not affect the meaning of the code',emoji: ':lipstick:'},{value: 'refactor',name: 'refactor: ♻️ 代码重构 | A code change that neither fixes a bug nor adds a feature',emoji: ':recycle:'},{value: 'perf',name: 'perf: ⚡ 性能提升 | A code change that improves performance',emoji: ':zap:'},{value: 'test',name: 'test: ✅ 测试相关 | Adding missing tests or correcting existing tests',emoji: ':white_check_mark:'},{value: 'build',name: 'build: 📦️ 构建相关 | Changes that affect the build system or external dependencies',emoji: ':package:'},{value: 'ci',name: 'ci: 🎡 持续集成 | Changes to our CI configuration files and scripts',emoji: ':ferris_wheel:'},{ value: 'revert', name: 'revert: ⏪️ 回退代码 | Revert to a commit', emoji: ':rewind:' },{value: 'chore',name: 'chore: 🔨 其他修改 | Other changes that do not modify src or test files',emoji: ':hammer:'}],useEmoji: true,emojiAlign: 'center',useAI: false,aiNumber: 1,themeColorCode: '',scopes: [],allowCustomScopes: true,allowEmptyScopes: true,customScopesAlign: 'bottom',customScopesAlias: 'custom',emptyScopesAlias: 'empty',upperCaseSubject: false,markBreakingChangeMode: false,allowBreakingChanges: ['feat', 'fix'],breaklineNumber: 100,breaklineChar: '|',skipQuestions: [],issuePrefixes: [// 如果使用 gitee 作为开发管理{ value: 'link', name: 'link: 链接 ISSUES 进行中' },{ value: 'closed', name: 'closed: 标记 ISSUES 已完成' }],customIssuePrefixAlign: 'top',emptyIssuePrefixAlias: 'skip',customIssuePrefixAlias: 'custom',allowCustomIssuePrefix: true,allowEmptyIssuePrefix: true,confirmColorize: true,scopeOverrides: undefined,defaultBody: '',defaultIssues: '',defaultScope: '',defaultSubject: ''}
}
配置package.json文件
"scripts": {"dev": "vite --host","build": "vite build","preview": "vite preview","lint": "oxlint && eslint", "lint:fix": "oxlint --fix && eslint --fix","cz": "git-cz"
},
"config": {"commitizen": {"path": "node_modules/cz-git"}}
测试
在终端命令行中输入⬇️
git add .pnpm cz
然后会出现本次git提交选项
根据需求选择
ctrl + c
终止当前提交
Enter
下一步操作
模板
拉取后 开箱即用 模板地址➡️ https://github.com/gitboyzcf/vue3-vite-template
样例
此模板开发大屏模板样例➡️ https://github.com/gitboyzcf/vue3-simple-screen
敬请期待
后续还会有新功能接入当前模板,敬请期待…
到这里就结束了,后续还会更新 前端 系列相关,还请持续关注!
感谢阅读,若有错误可以在下方评论区留言哦!!!
推荐文章👇
Eslint 会被 Oxlint 干掉吗?
uniapp-vue3-vite 搭建小程序、H5 项目模板
相关文章:

Vue3、Vite5、Primevue、Oxlint、Husky9 简单快速搭建最新的Web项目模板
Vue3、Vite5、Oxlint、Husky9 简单搭建最新的Web项目模板 特色进入正题创建基础模板配置API自动化导入配置组件自动化导入配置UnoCss接入Primevue接入VueRouter4配置项目全局环境变量 封装Axios接入Pinia状态管理接入Prerttier OXLint ESLint接入 husky lint-staged…...

DataStream编程模型之数据源、数据转换、数据输出
Flink之DataStream数据源、数据转换、数据输出(scala) 0.前言–数据源 在进行数据转换之前,需要进行数据读取。 数据读取分为4大部分: (1)内置数据源; 又分为文件数据源; socket…...
海康IPC接入TRTC时,从海康中获取的数据显示时色差不正确
2021/1 记录海康IPC接入TRTC时的历史日志 从海康sdk接口获取数据,进行解码 org.MediaPlayer.PlayM4.Player.T_YV12;private void setDecodeCB() {Player.getInstance().setDecodeCB(m_iPort, (nPort, data, nDataLen, nWidth, nHeight, nFrameTime, nDataType,…...

『VUE』31. 生命周期的应用(详细图文注释)
目录 在合适的时间进行操作取dom元素利用生命周期模拟网络数据发送代码示例 总结 欢迎关注 『VUE』 专栏,持续更新中 欢迎关注 『VUE』 专栏,持续更新中 在合适的时间进行操作 假设网页一颗果树,我们要取dom(果实),一定要在渲染完成后才能取(果实) 通常…...
Mybatis框架之建造者模式 (Builder Pattern)
MyBatis 框架中大量使用了 建造者模式 (Builder Pattern) 来构建复杂的对象,尤其是在 SQL 语句的解析、配置对象的创建以及动态 SQL 的生成 等方面。建造者模式使得 MyBatis 能够更灵活、清晰地构建对象,尤其是那些需要多步创建和配置的复杂对象。 1. 什…...

Java从入门到精通笔记篇(十三)
与流处理 ambda表达式 定义 lambda表达式不能被独立执行,因此必须实现函数式接口,并且会返回一个函数式接口的对象。 可将其语法用下列的方式理解 误区警示 “->”符号是由英文状态下的“-”和“>”组成的,符号之间没有空格。 lambd…...

嵌入式:STM32的启动(Startup)文件解析
相关阅读 嵌入式https://blog.csdn.net/weixin_45791458/category_12768532.html?spm1001.2014.3001.5482 启动文件(Startup File)是嵌入式系统开发中的核心组件之一,它用于初始化系统并为主程序的运行做好准备。在大多数情况下,启动文件是用汇编语言编…...
ElasticSearch学习笔记四:基础操作(二)
一、前言 上一篇文章中我们学习了ES中的基础操作,包括索引和映射,同时也学习了ES中的基础数据类型,今天我们继续学习其他的数据类型。 二、复杂数据类型 1、数组(Array) 在ES中没有特别指定数据类型,换…...
ODA-em-application.log太大处理
检查oda时发现u01使用率很高,层层排查到是em-application.log文件太大 orcl2:/u01/app/oracle/product/11.2.0.4/dbhome_1/oc4j/j2ee/OC4J_DBConsole_oda1_orcl/logoda1>du -sh * 57G em-application.log 2.2M global-application.log 92M …...

基于现金红包营销活动的开源 AI 智能名片与 S2B2C 商城小程序融合发展研究
摘要:本文深入剖析现金红包这一平台补贴的营销利器在消费场景中的多元应用,并将其与开源 AI 智能名片、S2B2C 商城小程序相融合,探讨其中蕴含的创新模式与商业价值。通过详尽解析各类现金红包的使用条件,阐述如何巧妙运用这些营销…...

远程管理不再难!树莓派5安装Raspberry Pi OS并实现使用VNC异地连接
前言:大家好!今天我要教你们如何在树莓派5上安装Raspberry Pi OS,并配置SSH和VNC权限。通过这些步骤,你将能够在Windows电脑上使用VNC Viewer,结合Cpolar内网穿透工具,实现长期的公网远程访问管理本地树莓派…...
React中 setState 是同步的还是异步的?调和阶段 setState 干了什么?
React中 setState 是同步的还是异步的 1. React 的 setState 是异步的2. 为什么 setState 在合成事件和生命周期函数中是异步的3. 为什么 setState 在原生事件和定时器中是同步的4. 为什么要这样设计?调和阶段是什么setState在调和阶段干了什么?总结&…...

【D3.js in Action 3 精译_040】4.4 D3 弧形图的绘制方法
当前内容所在位置: 第四章 直线、曲线与弧线的绘制 ✔️ 4.1 坐标轴的创建(上篇) 4.1.1 D3 中的边距约定(中篇)4.1.2 坐标轴的生成(中篇) 4.1.2.1 比例尺的声明(中篇)4.1…...
C++设计模式:抽象工厂模式(风格切换案例)
抽象工厂模式(Abstract Factory)是一种创建型设计模式,其核心思想是:为一组相关或相互依赖的对象提供一个创建接口,而无需指定它们具体的类。简单来说,就是一个工厂可以生产一系列相关的对象。 我们接下来…...
搜维尔科技:Xsens随时随地捕捉,在任何环境下实时录制或捕捉
Xsens随时随地捕捉,在任何环境下实时录制或捕捉 搜维尔科技:Xsens随时随地捕捉,在任何环境下实时录制或捕捉...

爬虫基础总结 —— 附带爬取案例
Crawler —— Learning experience 数据的传输: 在OSI七层模型中,传输层为源主机和目标主机之间提供可靠的数据传输和通信服务,在该层中,有两个重要的协议—— TCP与 UDP协议。 TCP协议(传输控制协议) …...

图像处理学习笔记-20241118
文章目录 霍夫变换基本原理霍夫变换的步骤使用 OpenCV 实现直线检测示例:标准霍夫变换 示例:概率霍夫变换参数解释霍夫变换检测圆 基于GAN的样本生成GAN的基本原理基于GAN的数据增广流程实现代码示例 同态滤波(Homomorphic Filtering…...

不能打开网页,但能打开QQ、微信(三种方式)
1.VPN错误 下面三个开关全关闭 2.DNS问题 WINR 输入CMD打开命令行 命令行输入 ipconfig/flushdns 重启电脑 3.直接火绒(一键修复)...

使用 start-local 脚本在本地运行 Elasticsearch
警告:请勿将这些说明用于生产部署 本页上的说明仅适用于本地开发。请勿将此配置用于生产部署,因为它不安全。请参阅部署选项以获取生产部署选项列表。 使用 start-local 脚本在 Docker 中快速设置 Elasticsearch 和 Kibana 以进行本地开发或测试。 此设…...

计算机网络:概述知识点及习题练习
网课资源: 湖科大教书匠 1、因特网 网络之间需要路由器进行互联,互联网是网络的网络,因特网是最大的互联网,连接到网络的设备称为主机,一般不叫路由器为主机。 因特网发展:ARPNET->三级结构因特网&am…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...