当前位置: 首页 > news >正文

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(可选)
      • 测试
  • 模板
  • 样例
  • 敬请期待

1

无人扶我青云志,我自踏雪至山巅

作者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

得到以下目录结构⬇️
1

配置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中不用引入直接可以使用
22

<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>

444

更多组件请看➡️ https://primevue.org/button/

接入VueRouter4

https://router.vuejs.org/zh/

安装依赖

pnpm i vue-router@4

创建以下文件夹以及文件
333

直接插入以下代码⬇️

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

创建以下文件夹以及文件
444

直接插入以下代码⬇️

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

根据响应提示选择,以下是我的选择⬇️

22
执行完后会自动创建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形式展现⬇️
88

接入 husky + lint-staged(可选)

安装依赖

pnpm i husky lint-staged -D

执行 pnpm exec husky init 并且在 package.jsonscripts里面增加 "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提交时会出现下面问题⬇️
123
说是无法执行这个二进制文件 ,解决方案如下⬇️
在vscode编辑器底部操作栏 会显示当前文件编码格式 默认为➡️11111
点击后选择2222233333
然后再次执行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提交选项
git提交选项

根据需求选择

ctrl + c 终止当前提交
Enter 下一步操作

模板

拉取后 开箱即用 模板地址➡️ https://github.com/gitboyzcf/vue3-vite-template

样例

此模板开发大屏模板样例➡️ https://github.com/gitboyzcf/vue3-simple-screen

大屏样例

敬请期待

后续还会有新功能接入当前模板,敬请期待…






到这里就结束了,后续还会更新 前端 系列相关,还请持续关注!
感谢阅读,若有错误可以在下方评论区留言哦!!!

111


推荐文章👇

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&#xf…...

DataStream编程模型之数据源、数据转换、数据输出

Flink之DataStream数据源、数据转换、数据输出&#xff08;scala&#xff09; 0.前言–数据源 在进行数据转换之前&#xff0c;需要进行数据读取。 数据读取分为4大部分&#xff1a; &#xff08;1&#xff09;内置数据源&#xff1b; 又分为文件数据源&#xff1b; socket…...

海康IPC接入TRTC时,从海康中获取的数据显示时色差不正确

2021/1 记录海康IPC接入TRTC时的历史日志 从海康sdk接口获取数据&#xff0c;进行解码 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』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 在合适的时间进行操作 假设网页一颗果树,我们要取dom(果实),一定要在渲染完成后才能取(果实) 通常…...

Mybatis框架之建造者模式 (Builder Pattern)

MyBatis 框架中大量使用了 建造者模式 (Builder Pattern) 来构建复杂的对象&#xff0c;尤其是在 SQL 语句的解析、配置对象的创建以及动态 SQL 的生成 等方面。建造者模式使得 MyBatis 能够更灵活、清晰地构建对象&#xff0c;尤其是那些需要多步创建和配置的复杂对象。 1. 什…...

Java从入门到精通笔记篇(十三)

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

嵌入式:STM32的启动(Startup)文件解析

相关阅读 嵌入式https://blog.csdn.net/weixin_45791458/category_12768532.html?spm1001.2014.3001.5482 启动文件(Startup File)是嵌入式系统开发中的核心组件之一&#xff0c;它用于初始化系统并为主程序的运行做好准备。在大多数情况下&#xff0c;启动文件是用汇编语言编…...

ElasticSearch学习笔记四:基础操作(二)

一、前言 上一篇文章中我们学习了ES中的基础操作&#xff0c;包括索引和映射&#xff0c;同时也学习了ES中的基础数据类型&#xff0c;今天我们继续学习其他的数据类型。 二、复杂数据类型 1、数组&#xff08;Array&#xff09; 在ES中没有特别指定数据类型&#xff0c;换…...

ODA-em-application.log太大处理

检查oda时发现u01使用率很高&#xff0c;层层排查到是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 商城小程序融合发展研究

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

远程管理不再难!树莓派5安装Raspberry Pi OS并实现使用VNC异地连接

前言&#xff1a;大家好&#xff01;今天我要教你们如何在树莓派5上安装Raspberry Pi OS&#xff0c;并配置SSH和VNC权限。通过这些步骤&#xff0c;你将能够在Windows电脑上使用VNC Viewer&#xff0c;结合Cpolar内网穿透工具&#xff0c;实现长期的公网远程访问管理本地树莓派…...

React中 setState 是同步的还是异步的?调和阶段 setState 干了什么?

React中 setState 是同步的还是异步的 1. React 的 setState 是异步的2. 为什么 setState 在合成事件和生命周期函数中是异步的3. 为什么 setState 在原生事件和定时器中是同步的4. 为什么要这样设计&#xff1f;调和阶段是什么setState在调和阶段干了什么&#xff1f;总结&…...

【D3.js in Action 3 精译_040】4.4 D3 弧形图的绘制方法

当前内容所在位置&#xff1a; 第四章 直线、曲线与弧线的绘制 ✔️ 4.1 坐标轴的创建&#xff08;上篇&#xff09; 4.1.1 D3 中的边距约定&#xff08;中篇&#xff09;4.1.2 坐标轴的生成&#xff08;中篇&#xff09; 4.1.2.1 比例尺的声明&#xff08;中篇&#xff09;4.1…...

C++设计模式:抽象工厂模式(风格切换案例)

抽象工厂模式&#xff08;Abstract Factory&#xff09;是一种创建型设计模式&#xff0c;其核心思想是&#xff1a;为一组相关或相互依赖的对象提供一个创建接口&#xff0c;而无需指定它们具体的类。简单来说&#xff0c;就是一个工厂可以生产一系列相关的对象。 我们接下来…...

搜维尔科技:Xsens随时随地捕捉,在任何环境下实时录制或捕捉

Xsens随时随地捕捉&#xff0c;在任何环境下实时录制或捕捉 搜维尔科技&#xff1a;Xsens随时随地捕捉&#xff0c;在任何环境下实时录制或捕捉...

爬虫基础总结 —— 附带爬取案例

Crawler —— Learning experience 数据的传输&#xff1a; 在OSI七层模型中&#xff0c;传输层为源主机和目标主机之间提供可靠的数据传输和通信服务&#xff0c;在该层中&#xff0c;有两个重要的协议—— TCP与 UDP协议。 TCP协议&#xff08;传输控制协议&#xff09; …...

图像处理学习笔记-20241118

文章目录 霍夫变换基本原理霍夫变换的步骤使用 OpenCV 实现直线检测示例&#xff1a;标准霍夫变换 示例&#xff1a;概率霍夫变换参数解释霍夫变换检测圆 基于GAN的样本生成GAN的基本原理基于GAN的数据增广流程实现代码示例 同态滤波&#xff08;Homomorphic Filtering&#xf…...

不能打开网页,但能打开QQ、微信(三种方式)

1.VPN错误 下面三个开关全关闭 2.DNS问题 WINR 输入CMD打开命令行 命令行输入 ipconfig/flushdns 重启电脑 3.直接火绒&#xff08;一键修复&#xff09;...

使用 start-local 脚本在本地运行 Elasticsearch

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

计算机网络:概述知识点及习题练习

网课资源&#xff1a; 湖科大教书匠 1、因特网 网络之间需要路由器进行互联&#xff0c;互联网是网络的网络&#xff0c;因特网是最大的互联网&#xff0c;连接到网络的设备称为主机&#xff0c;一般不叫路由器为主机。 因特网发展&#xff1a;ARPNET->三级结构因特网&am…...

python蓝桥杯刷题2

1.最短路 题解&#xff1a;这个采用暴力枚举&#xff0c;自己数一下就好了 2.门牌制作 题解&#xff1a;门牌号从1到2020&#xff0c;使用for循环遍历一遍&#xff0c;因为range函数无法调用最后一个数字&#xff0c;所以设置成1到2021即可&#xff0c;然后每一次for循环&…...

在openi平台 基于华为顶级深度计算平台 openmind 动手实践

大家可能一直疑问&#xff0c;到底大模型在哪里有用。 本人从事的大模型有几个方向的业务。 基于生成式语言模型的海事航行警告结构化解析。 基于生成式语言模型的航空航行警告结构化解析。 基于生成式生物序列&#xff08;蛋白质、有机物、rna、dna、mrna&#xff09;的多模态…...

KF UKF

我需要Kalman 现在&#xff0c;主要是用来处理检测问题情况里的漏检&#xff0c;因为模拟了一段2D&#xff0c; &#xff08;x&#xff0c;y&#xff09;的数据&#xff0c;为了看效果&#xff0c;画的线尽量简单一点&#xff1a; import numpy as np import matplotlib.pyplo…...

中伟视界:AI智能分析算法如何针对非煤矿山的特定需求,提供定制化的安全生产解决方案

非煤矿山智能化改造&#xff0c;除了政策文件&#xff0c;上级监管单位需要安装的AI智能分析算法功能之外的&#xff0c;矿方真正关心的&#xff0c;能解决矿方安全生产隐患的AI智能分析算法功能有哪些呢&#xff1f; 经过与矿方的现场交流沟通&#xff0c;收集第一现场人员对安…...

Unity 编辑器下 Android 平台 Addressable 加载模型粉红色,类似材质丢失

Unity 编辑器下 Android 平台 Addressable 加载模型粉红色&#xff0c;类似材质丢失 Addressable Play Mode Script加载模式 选择 Use Existiing Build 1.Unity 切换到 PC 平台&#xff0c;执行 Addressable Build 运行&#xff0c;加载 bundle 内的预制体 显示正常 2.Unit…...

Pytest-Bdd-Playwright 系列教程(10):配置功能文件路径 优化场景定义

Pytest-Bdd-Playwright 系列教程&#xff08;10&#xff09;&#xff1a;配置功能文件路径 & 优化场景定义 前言一、功能文件路径的配置1.1 全局设置功能文件路径1.2. 在场景中覆盖路径 二、避免重复输入功能文件名2.1 使用方法2.2 functools.partial 的背景 三、应用场景总…...

rust逆向初探

rust 逆向葵花宝典 rust逆向技巧 rust逆向三板斧&#xff1a; [!NOTE] 快速定位关键函数 (真正的main函数)&#xff1a;观察输出、输入&#xff0c;字符串搜索&#xff0c;断点等方法。定位关键 加密区 &#xff1a;根据输入的flag&#xff0c;打硬件断点&#xff0c;快速捕获…...

【Linux】apt 关闭 ssl 认证

【注意】apt 关闭 ssl 认证可能会引起软件安装风险&#xff0c;请尽量避免关闭。 执行以下命令可以实现全局关闭 sll 验证。 echo Acquire::https::Verify-Peer "false"; >> /etc/apt/apt.conf.d/99disable-signature-verificationecho Acquire::https::Verif…...

【算法】P5018 对称二叉树

题目 P5018 对称二叉树 https://www.luogu.com.cn/problem/P5018 代码 思路&#xff1a;领接表存储二叉树&#xff0c;unordered_map存储各个节点对应的值。dfs遍历一下各个子树的大小个数&#xff0c;再写个递归判断是否是对称二叉树&#xff0c;如果是就更新全局答案。 #…...

Unifying Top-down and Bottom-up Scanpath Prediction Using Transformers

Abstract 大多数视觉注意力模型旨在预测自上而下或自下而上的控制&#xff0c;这些控制通过不同的视觉搜索和自由观看任务进行研究。本文提出了人类注意力变换器&#xff08;Human Attention Transformer&#xff0c;HAT&#xff09;&#xff0c;这是一个能够预测两种形式注意力…...

简易做网站/seo网站建设

题意&#xff1a;在n*m的巧克力上面有两个独立的点&#xff0c;它门同时在巧克力上移动&#xff08;两个点相对静止&#xff09;&#xff0c;被扫到巧克力块会被溶解&#xff0c;问你最少能留下多少块巧克力&#xff01; 解题思路&#xff1a;将这两个点看成一个小矩形的对角线…...

网站建设pdf下载/南沙seo培训

变换编码的设计与实现 一、实验目的 采用dct变换&#xff0c;编制对图象进行变换的程序&#xff0c;图象采用8x8分快。 对变换系数做Z型扫描&#xff0c;分别采用前2、3、5、8个和全部系数恢复原图象&#xff0c;观察结果&#xff0c;给出psnr值。 对变换后系数做量化&…...

加盟平台网站怎么做/百度上怎么注册店铺地址

Description \(k\)堆石子&#xff0c;两个人游戏&#xff1a; 首先&#xff0c;A拿走若干堆石子&#xff08;不能全部拿走&#xff09;之后&#xff0c;B拿走若干堆石子&#xff08;不能全部拿走&#xff09;然后从A开始\(Nim\)游戏。问A能不能取胜。如果能&#xff0c;A第一步…...

怎么用腾讯云主机建设网站/湖南优化推广

2019独角兽企业重金招聘Python工程师标准>>> 原始的代码是来自这个网站http://www.csrcode.cn/article-3695-1.html 但是原始帖子我也不知道是哪个&#xff0c;我觉得不太好用&#xff0c;自己整合了一下&#xff0c;可以对表格数据进行伪分页&#xff0c;而且只需要…...

海尔网站建设策划书/正规seo一般多少钱

1.对c语言的看法在上大学之前&#xff0c;我对这个专业仅仅的认知是学电脑的&#xff0c;对编程来说更是一无所知&#xff0c;而我选择计算机专业完全是因为我从小就喜欢玩电脑&#xff0c;仅此而已。记得小时候还不会拼音和英文的时候&#xff0c;我玩的第一个游戏就是侠盗飞车…...

金华网站建设优化技术/杭州数据推广

题意&#xff1a;每个人都有一个物品&#xff0c;对应一定的钱数&#xff0c;想要得到此物品可以直接出钱&#xff0c;也可以通过用其他人的物品并添加一些钱来交换&#xff0c;问要得到酋长的物品最少需要多少钱&#xff1f;另外&#xff0c;每个人都有一个等级&#xff0c;要…...